我有一个视图和一个ViewModel,并希望在ViewModel中设置一些变量,并在视图中读取和设置它们。在ViewModel中我有一个@Published变量。当我试图修改视图中变量的值时,我得到的错误是:'不能分配给属性:'$testModel'是不可变的'和'不能将'字符串'类型的值分配给'绑定'。有办法做到这一点吗?我现在的代码如下:
<<p>视图/strong>struct TestView: View {
@ObservedObject var testModel: TestViewModel = TestViewModel()
var body: some View {
VStack(alignment: .center, spacing: 4) {
Button(action: {
$testModel.test = "test2"
}) {
Text("[ Set value ]")
}
}
}
}
ViewModel
class TestViewModel: ObservableObject {
@Published var test = "test"
}
由于您不需要Binding
来设置值,因此您不需要$testModel
,只需要testModel
。
将代码改为:
Button(action: {
testModel.test = "test2"
}) {
Text("[ Set value ]")
}
同样值得注意的是,您应该在这里使用@StateObject
而不是@ObservedObject
,以防止TestViewModel
可能被初始化多次。