Skip to content

创建遵循ObservableObject协议的ViewModel

在SwiftUI中,创建一个遵循ObservableObject协议的ViewModel是实现数据驱动视图的关键步骤。通过这种方式,您可以轻松地管理和更新视图状态。

1. 定义ViewModel

首先,您需要定义一个类,并使其遵循ObservableObject协议。这个类将包含您想要在视图中显示的数据。

swift
import SwiftUI
import Combine

class MyViewModel: ObservableObject {
    @Published var data: String = "初始数据"
    
    func updateData(newData: String) {
        data = newData
    }
}

在上面的代码中,@Published属性包装器用于标记data属性。当data的值发生变化时,所有订阅该ViewModel的视图都会自动更新。

2. 创建View

接下来,您可以创建一个SwiftUI视图,并在其中使用这个ViewModel。使用@StateObject来初始化ViewModel。

swift
struct ContentView: View {
    @StateObject var viewModel = MyViewModel()
    
    var body: some View {
        VStack {
            Text(viewModel.data)
                .font(.largeTitle)
                .padding()
            
            Button("更新数据") {
                viewModel.updateData(newData: "更新后的数据")
            }
        }
    }
}

在这个视图中,Text组件会显示ViewModel中的data属性。点击按钮时,updateData方法会被调用,从而更新data的值。

3. 观察数据变化

当您使用@StateObject时,SwiftUI会自动观察ViewModel的变化。每当data更新时,视图会重新渲染,确保用户看到最新的信息。

4. 结合其他功能

您可以将ViewModel与其他功能结合使用,例如网络请求或本地数据存储。通过将这些功能封装在ViewModel中,您可以保持视图的简洁性和可维护性。

swift
func fetchData() {
    // 模拟网络请求
    DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
        self.data = "从网络获取的数据"
    }
}

在这个示例中,fetchData方法模拟了一个网络请求,您可以在视图的onAppear修饰符中调用它。

总结

通过创建遵循ObservableObject协议的ViewModel,您可以有效地管理SwiftUI应用中的状态。使用@Published@StateObject,您可以确保视图与数据保持同步。这样,您就能构建出响应迅速且用户友好的应用程序。继续探索SwiftUI的强大功能,您会发现更多的可能性!🚀

本站使用 VitePress 制作