gpt4 book ai didi

ios - 如何告诉 SwiftUI View 绑定(bind)到嵌套的 Observable 对象

转载 作者:行者123 更新时间:2023-12-02 21:16:42 26 4
gpt4 key购买 nike

我有一个 SwiftUI View ,它接受一个名为 appModel 的环境对象。然后,它在其 body 方法中读取值 appModel.submodel.count。我希望这会将我的 View 绑定(bind)到 submodel 上的属性 count ,以便在属性更新时重新渲染,但这似乎不会发生。

这是一个错误吗?如果没有,在 SwiftUI 中将 View 绑定(bind)到环境对象的嵌套属性的惯用方法是什么?

具体来说,我的模型看起来像这样......

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 { [weak self] (_) in
self?.objectWillChange.send()
}
}
}

基本上,您的AppModelSubModel捕获事件并将其进一步发送到View

编辑:

如果您不需要 SubModel 成为类,那么您可以尝试这样的操作:

struct SubModel{
var count = 0
}

class AppModel: ObservableObject {
@Published var submodel: SubModel = SubModel()
}

关于ios - 如何告诉 SwiftUI View 绑定(bind)到嵌套的 Observable 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58406287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com