我有一个SwiftUI视图,其中包含一个名为的EnvironmentObject appModel。然后,它读取appModel.submodel.count其body方法中的值。我希望这可以将我的视图绑定到该属性count,submodel以便在属性更新时重新呈现该属性,但这似乎没有发生。
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,但如果可能的话,我想避免这样做。
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并将其发送到视图
AppModel
Submodel
编辑:
如果您不需要SubModel上课,则可以尝试以下方法:
SubModel
struct Submodel{ var count = 0 } class AppModel: ObservableObject { @Published var submodel: Submodel = Submodel() }