如何告诉SwiftUI视图绑定到嵌套的ObservableObjects
我有一个SwiftUI视图,其中包含一个名为的EnvironmentObject
appModel
。然后,它读取appModel.submodel.count
其body
方法中的值。我希望这可以将我的视图绑定到该属性count
,submodel
以便在属性更新时重新呈现该属性,但这似乎没有发生。
这是一个错误吗?如果没有,将视图绑定到SwiftUI中环境对象的嵌套属性的惯用方式是什么?
具体来说,我的模型看起来像这样…
class Submodel: ObservableObject { @Published var count = 0
}
class AppModel: ObservableObject {
@Published var submodel: Submodel = Submodel()
}
我的观点看起来像这样…
struct ContentView: View { @EnvironmentObject var appModel: AppModel
var body: some View {
Text("Count: \(appModel.submodel.count)")
.onTapGesture {
self.appModel.submodel.count += 1
}
}
}
当我运行应用程序并单击标签时,count
属性会增加,但标签不会更新。
我可以通过将appModel.submodel
属性作为传入来解决此问题ContentView
,但如果可能的话,我想避免这样做。
回答:
嵌套模型在SwiftUI中尚不可用,但是您可以执行以下操作
class Submodel: ObservableObject { @Published var count = 0
}
class AppModel: ObservableObject {
@Published var submodel: Submodel = Submodel()
var anyCancellable: AnyCancellable? = nil
init() {
anyCancellable = submodel.objectWillChange.sink { (_) in
self.objectWillChange.send()
}
}
}
基本上,您可以AppModel
捕获事件Submodel
并将其发送到视图
编辑:
如果您不需要SubModel
上课,则可以尝试以下方法:
struct Submodel{ var count = 0
}
class AppModel: ObservableObject {
@Published var submodel: Submodel = Submodel()
}
以上是 如何告诉SwiftUI视图绑定到嵌套的ObservableObjects 的全部内容, 来源链接: utcz.com/qa/407779.html