SwiftUI的出现,让我觉得开发构建一个App变得更加简单和高效,之前在学习了各种开发App的教程之后,我学习到了一种开发模式MVVM(Model-View-ViewModel):

Model //数据和业务逻辑。
View //用户界面,负责展示数据。
ViewModel //连接 Model 和 View,处理逻辑和状态。

目前规划的是该App具备类似于钉钉中带有报销审批流程的工具,设计并开发这款App的原因是:我和我女朋友会有想买各种东西的时候,但是想一起商量或者说征求对方同意或者是想让对方报销这么一个场景,于是我就想做一个App来专门用于情侣之间或者好朋友之间的工具。

那么既然是存在用户与用户之间存在联系的App,那么必然会有一个注册登录的功能,那么结合MVVM的设计模式,初步设计用户(User)的模型(Model)如下:

struct User {
    var user_id: String
    var username: String
    var email: String
}

展示用户信息的页面视图(View)如下:

struct ProfileView: View {
    @StateObject var viewModel = UserViewModel()

    var body: some View {
        VStack {
            Text("Welcome, \(viewModel.user.username ?? "User")")
                .font(.largeTitle)
                .padding()

            Text("Email: \(viewModel.user.email)")
                .padding()

            Button("Logout") {
                viewModel.logout()
            }
            .padding()
        }
    }
}

#Preview {
    ProfileView(viewModel: UserViewModel())
}

视图模型(ViewModel)如下:

class UserViewModel: ObservableObject {
    @Published var user: User

    init(user: User) {
        self.user = user
    }

    func updateName(newName: String) {
        user.username = newName
    }

    func logout() {
        // 退出登录
    }
}

一是就是一套非常简单的MVVM的设计模式,其中用到了一些协议和属性包装器:

ObservableObject
该协议在 SwiftUI 中用于创建可观察的数据对象。它允许视图在数据发生变化时自动更新。在它所创建的类内部使用@Published来标记属性时,可以让依赖这些属性的视图进行自动更新。此外ObservableObject还通常和@StateObject、@ObservedObject一起使用:
@StateObject:创建和初始化 ViewModel;

@ObservedObject 引用父视图传递的 ViewModel

画面UI显示如下:

​​​​​​​

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐