【问题标题】:SwiftUI View and ViewModel Modifying with Binding and Observed variablesSwiftUI View 和 ViewModel 使用 Binding 和 Observed 变量修改
【发布时间】:2021-10-11 05:07:33
【问题描述】:

我有一个 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"

}

【问题讨论】:

    标签: view swiftui properties binding viewmodel


    【解决方案1】:

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

    把代码改成这样:

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

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

    【讨论】:

    • 有效!非常感谢!
    • @user200000 很高兴它有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 2020-08-24
    • 2012-05-06
    • 2019-12-11
    • 1970-01-01
    相关资源
    最近更新 更多