view - 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"
}
解决方案
由于您不需要Binding
来设置值,因此您不需要$testModel
, 只需testModel
.
将代码更改为:
Button(action: {
testModel.test = "test2"
}) {
Text("[ Set value ]")
}
还值得注意的是,您应该使用@StateObject
而不是@ObservedObject
此处来防止TestViewModel
可能被多次初始化。
推荐阅读
- ios - 更新垂直堆栈视图内容
- javascript - 面临的错误可能是因为对话流版本已更改。下面提到了来自firebase的错误它不起作用
- reactjs - 如何正确缓解 reactjs 中的无效钩子问题
- javascript - 如何从我的数据集中时间为 HH:MM:SS 的时间戳列创建时间为 HH:MM 的列
- c# - 如何对 MassTransit 请求响应进行单元测试
- reactjs - Ionic Native 联系人花费大量时间并阻塞 UI
- internet-explorer - Google 翻译无法在 Edge 或 Internet Explorer 中运行
- python - 在python中对列表进行修改
- excel - 您如何在一个范围内查找条件,然后将另一个范围内的信息获取到单个单元格中?
- machine-learning - 为什么我在 Pytorch 的加载模型中得到 NONE 参数梯度,即使在 backword 之后?