如何告诉SwiftUI视图绑定到嵌套的ObservableObjects

我有一个SwiftUI视图,其中包含一个名为的EnvironmentObject

appModel。然后,它读取appModel.submodel.countbody方法中的值。我希望这可以将我的视图绑定到该属性countsubmodel以便在属性更新时重新呈现该属性,但这似乎没有发生。

这是一个错误吗?如果没有,将视图绑定到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

回到顶部