【发布时间】:2019-12-28 04:00:00
【问题描述】:
我有一个符合@ObservableObject 协议的类,并使用它自己的变量和@Published 属性包装器创建了一个子类来管理状态。
似乎@published 属性包装器在使用子类时被忽略了。有谁知道这是否是预期行为以及是否有解决方法?
我正在运行 iOS 13 Beta 8 和 xCode Beta 6。
这是我所看到的一个例子。在 MyTestObject 上更新 TextField 时,Text 视图会正确更新为 aString 值。如果我更新MyInheritedObjectTextField,则另一个字符串值不会在文本视图中更新。
import SwiftUI
class MyTestObject: ObservableObject {
@Published var aString: String = ""
}
class MyInheritedObject: MyTestObject {
@Published var anotherString: String = ""
}
struct TestObserverWithSheet: View {
@ObservedObject var myTestObject = MyInheritedObject()
@ObservedObject var myInheritedObject = MyInheritedObject()
var body: some View {
NavigationView {
VStack(alignment: .leading) {
TextField("Update aString", text: self.$myTestObject.aString)
Text("Value of aString is: \(self.myTestObject.aString)")
TextField("Update anotherString", text: self.$myInheritedObject.anotherString)
Text("Value of anotherString is: \(self.myInheritedObject.anotherString)")
}
}
}
}
【问题讨论】:
-
不要冒犯,但您发布的代码不包含任何建议子类化的内容。它在哪里?
-
我可能混淆了术语,但 MyInheritedObject 类继承自 MyTestObject 类?
-
我不确定我是否理解正确,或者我没有正确解释我的问题?代码已经创建了两个类,
MyTestObject: ObservableObject和class MyInheritedObject: MyTestObject。如果您复制粘贴我描述的确切代码,您可以测试并亲自查看self.myInheritedObject.anotherString的值没有更新。 -
啊!我的错。我错过了遗产。 :-) 我可能有答案。让我尝试一下,我会在几分钟后发布一些内容。
标签: ios swift inheritance swiftui ios13