我在 ContentView 类中有我的主视图,我在 ContentViewModel 类中进行网络调用,并使用响应更新类调用 User。
我的 ContentView 有几个子视图,例如 HeaderView。当我从 API 响应更新 User 类属性时,我还想更新 HeaderView 中定义的 UI 元素。如何将数据从 ContentViewModel 类传递到我的子视图 (HeaderView)?
我可以通过设置 ContentViewModel 类 ObservableObject 来更新非常简单的 ContentView 元素
class ContentViewModel: ObservableObject {
并发布了 User 对象
@Published var user = User()
并在同一 ContentViewModel 中收到 API 响应后更新用户的属性
self.user.name = name
我的 ContentView 与它的模型类有如下关系
@StateObject private var contentViewModel = ContentViewModel()
和 UI 更新如下
Text("My name \(contentViewModel.user.name)")
这就是 ContentView 的工作场景。但我需要将值传递给 HeaderView()。我的用户类如下
import Foundation
class User {
var name = ""
// more attributes
}
这是我经常使用的模式:(注意没有私有变量)
struct ContentView: View {
@StateObject var contentViewModel = ContentViewModel()
...
var body: some View {
...
HeaderView(contentViewModel: contentViewModel)
}
}
struct HeaderView: View {
@ObservedObject var contentViewModel: ContentViewModel
var body: some View {
...
Text("My name \(contentViewModel.user.name)")
}
}
struct User {
var name = ""
// more attributes
}
您可以使用与“.environment(...)”模式相同的想法将 ContentViewModel 传递给所有子视图。
编辑:正如@Asperi 用户所建议的那样,应该将其设为一个结构体。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句