[英]SwiftUI view not getting updated on changing @ObservedObject
Here is a simple MVVM based TestView:这是一个简单的基于 MVVM 的 TestView:
import SwiftUI
public struct Test: View {
@ObservedObject public var viewModel = TestViewModel()
public init() {
}
public var body: some View {
VStack {
Text(viewModel.model.stri)
Button(action: {
self.viewModel.change()
}) {
Text("Change")
}
}.padding(50)
}
}
public class TestModel {
@Published public var condition: Bool = false
@Published var stri = "Random numbers"
}
public class TestViewModel: ObservableObject {
@Published var model = TestModel()
func change() {
model.condition.toggle()
model.stri = "\(Int.random(in: 1...10))"
}
}
The view does not get updated when the model is updated from inside the view model.当 model 从视图 model 内部更新时,视图不会更新。 The text should finally produce some random number between 1 and 10. Please let me know where I am going wrong.
文本最终应该会产生一些介于 1 和 10 之间的随机数。请让我知道我哪里出错了。
It is because your Test
view observes viewModel
but not viewModel.model
which is not changed in your scenario because it is a reference-type这是因为您的
Test
视图观察viewModel
而不是viewModel.model
在您的场景中没有更改,因为它是参考类型
The following is a solution以下是解决方案
func change() {
model.condition.toggle()
model.stri = "\(Int.random(in: 1...10))"
self.objectWillChange.send() // << this one !!
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.