我想将 SwiftUI 中的 ObservableObject 行为扩展到嵌套类,并且我正在寻找正确的方法来做到这一点。可以使用 Combine“手动”完成,但我想使用 SwiftUI 有一种更简洁的方法,我希望你能指出我正确的方向。这就是我的意思……</p>
下面是一个典型的 ObservableObject 应用,让 View 动态响应引用类型的变化。点击按钮切换showText
值,使文本出现/消失在屏幕上:
import SwiftUI
class MyClass: ObservableObject {
@Published var showText = false
}
struct ContentView: View {
@ObservedObject var instance = MyClass()
var body: some View {
VStack(spacing: 10) {
Button(action: {
print(self.instance.showText)
self.instance.showText.toggle()
}) {
Text("BUTTON").bold().padding()
.foregroundColor(.white)
.background(Color.red)
}
if instance.showText {
Text("Hello, World!")
}
}
}
}
这工作正常。
但是下面的修改呢,其中包含的类showText
是 an InnerClass
,本身包含在 an 中OuterClass
?按钮切换showText
得很好,但是值更改的通知不再通过OuterClass
实例传播到视图,因此视图根本不再显示文本。
import SwiftUI
class OuterClass: ObservableObject {
@Published var innerInstance = InnerClass()
}
class InnerClass: ObservableObject {
@Published var showText = false
}
struct ContentView: View {
@ObservedObject var outerInstance = OuterClass()
var body: some View {
VStack(spacing: 10) {
Button(action: {
self.outerInstance.innerInstance.showText.toggle()
}) {
Text("BUTTON").bold().padding()
.foregroundColor(.white)
.background(Color.red)
}
if outerInstance.innerInstance.showText {
Text("Hello, World!")
}
}
}
}
对此有什么优雅的解决方法?