ios - SwiftUI 视图在更改 @ObservedObject 时未更新
问题描述
这是一个简单的基于 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))"
}
}
从视图模型内部更新模型时,视图不会更新。文本最终应该会产生一些介于 1 和 10 之间的随机数。请让我知道我哪里出错了。
解决方案
这是因为您的Test
视图观察viewModel
但不是viewModel.model
在您的场景中没有改变,因为它是参考类型
以下是解决方案
func change() {
model.condition.toggle()
model.stri = "\(Int.random(in: 1...10))"
self.objectWillChange.send() // << this one !!
}
推荐阅读
- c# - 如何将新值附加到现有的....arraylist c#的对象
- r - 按多个字符拆分字符串
- php - 使用 AJAX 和 PHP 更新表单字段
- android - 如何根据软键盘调整布局
- elasticsearch - 您输入的索引模式与任何索引都不匹配
- php - 如何找出确切的 Throwable 类是什么?
- python - 将嵌套列表传递给函数并获取嵌套列表
- android - Proguard 的 Android FirebasePerformance 问题
- c# - Unity VideoPlayer - isPrepared() ... 从未准备好
- android - Realm.getDefaultInstance(); 错误