ios - 当通过@Published 更改类中的属性值时,某些observedObjects 不会更新?
问题描述
这些都是代码。
调查问题类
class SurveyQuestion: ObservableObject {
@Published var text: String
init() {
print("Initialising now ...")
self.text = "HELLO"
changeText()
}
func changeText() {
print("Changing Text Now from \(text).. ")
if self.text == "HELLO"{
self.text = "BYE"
}
else{
self.text = "HELLO"
}
print("to \(self.text) \n")
}
}
子视图.swift
struct SubView: View {
@ObservedObject var someOtherClass = SurveyQuestion()
var body: some View {
Text("Text now is \(someOtherClass.text)")
}
}
内容视图.swift
struct ContentView: View {
@ObservedObject var someClass = SurveyQuestion()
var body: some View {
VStack{
Button(action: {
print("Changing Text Now !")
self.someClass.changeText()
}) {
Text("Change Text ")
}
Text("Text now is \(someClass.text)")
SubView()
}
}
}
每当我单击“changeText”按钮时,它会更改 Text(“Text now is (someClass.text)”)中的文本,但不会更改 Subview()。它们都应该使用相同的文本更改进行更新。知道这里出了什么问题吗?
解决方案
你someClass
和someOtherClass
是两个完全不同的对象。改变一个对另一个没有影响。如果这应该是一个可以同时影响不同视图的单例 observable,那么您需要一个环境对象。
推荐阅读
- c# - 如何播放和暂停 MediaElement?
- android - Android Studio 无法正确绘制按钮
- service - 如何在 Flutter 中创建定时服务
- excel - 引用范围内的单元格
- neo4j - 如何在不使用 MERGE Neo4J 3.5 的情况下防止重复关系?
- reactjs - 在 React Material Container Component 内部滚动不流畅
- android - Android 均衡器在 android 9 设备中不起作用
- css - CSS多列 - 段落分组?
- c# - 如何在 SQL Server 中查找中间有错误空格的数据?
- google-analytics - 谷歌分析:谷歌信号依赖什么查询字符串参数?