我将新 @Observable
宏用于我的 ViewModel。该类如下所示
@Observable
class TransitiveModel {
private var strings: [String] = []
func getStrings() -> [String] {
return strings
}
func addString(_ item: String) {
strings.append(item)
}
}
这是对我实际类的简化,但它可以作为最低限度的示例。您可能会争辩说,在这个例子中可能不需要 getStrings() 方法,但是在我的实际类中,我之前传递了参数并进行了一些计算,所以请假装它很重要。
我有一个简单的观点
private var model = TransitiveModel()
var body: some View {
VStack {
ForEach(model.getStrings(), id: \.self) { item in
Text(item)
}
Button("Add Item") {
model.addString("Hello")
}
}
}
当我按下按钮时,我预计视觉上不会有任何变化,因为我没有直接订阅strings
视图中的数组。然而,我观察到视图无论如何都会更新,很可能是因为getStrings()
依赖于已更改的数组。我不想依赖这种行为,除非我确定它是正确的,而不是故障或类似的东西。我认为更改strings
将触发再次调用该函数,对吗?是否有某种文档可以帮助我理解它?