首页 > 解决方案 > SwiftUI View 和 ViewModel 使用 Binding 和 Observed 变量修改

问题描述

我有一个 View 和一个 ViewModel,想在 ViewModel 中设置一些变量并在 View 中读取并设置它们。在 ViewModel 中,我有一个 @Published 变量。当我尝试在视图中修改变量的值时,我得到的错误是:'无法分配给属性:'$testModel' 是不可变的'和'无法将'String'类型的值分配给'Binding'类型。有没有办法做到这一点?我现在的代码如下:

看法

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 ]")
            }
        }
    }
}

视图模型

class TestViewModel: ObservableObject {

    @Published var test = "test"

}

标签: viewswiftuipropertiesbindingviewmodel

解决方案


由于您不需要Binding来设置值,因此您不需要$testModel, 只需testModel.

将代码更改为:

Button(action: {
    testModel.test = "test2"
}) {
    Text("[ Set value ]")
}

还值得注意的是,您应该使用@StateObject而不是@ObservedObject此处来防止TestViewModel可能被多次初始化。


推荐阅读