gpt4 book ai didi

ios - 如何告诉 SwiftUI View 绑定(bind)到多个嵌套的 ObservableObject

转载 作者:行者123 更新时间:2023-12-02 10:55:52 48 4
gpt4 key购买 nike

我有两个类嵌套在另一个类中,这是 SwiftUI View 中的一个可观察对象。即使嵌套类中的属性被声明为 @Published,它们的值(当它们更改时)不会在主视图中更新。

这里已经提出了类似的问题,我可以用它来让它适用于两个子类之一,但不能同时适用于两者。

How to tell SwiftUI views to bind to nested ObservableObjects

这是模型:

class Submodel1: ObservableObject {
@Published var count = 0
}

class Submodel2: ObservableObject {
@Published var count = 0
}

class Model: ObservableObject {
@Published var submodel1: Submodel1 = Submodel1()
@Published var submodel2: Submodel2 = Submodel2()
}

这是主视图:

struct ContentView: View {
@ObservedObject var model: Model = Model()

var body: some View {
VStack {
Text("Count: \(model.submodel1.count)")
.onTapGesture {
self.model.submodel1.count += 1
}
Text("Count: \(model.submodel2.count)")
.onTapGesture {
self.model.submodel2.count += 1
}
}
}
}

将其添加到模型类(请参阅之前的 Stackoverflow 问题)可用于更新 submodel1 更改,但不能同时更新两者:

  var anyCancellable: AnyCancellable? = nil
init() {
anyCancellable = submodel1.objectWillChange.sink { (_) in
self.objectWillChange.send()
}
}

我正在寻找是将 submodel1 和 submodel2 的更改传递到我的 View 的某种方法。

最佳答案

您可以使用CombineLatest来扩展您链接到的问题中的答案。当任一底层对象发生更改时,让您的模型触发其 objectWillChange 发布者:

import Combine

class Model: ObservableObject {
@Published var submodel1: Submodel1 = Submodel1()
@Published var submodel2: Submodel2 = Submodel2()

var anyCancellable: AnyCancellable? = nil

init() {
anyCancellable = Publishers.CombineLatest(submodel1.$count,submodel2.$count).sink(receiveValue: {_ in
self.objectWillChange.send()
})
}
}

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

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