我的问题可能是误解的结果,但我无法弄清楚,所以这里是:
使用 TextField 等组件或任何其他需要绑定作为输入的组件时
TextField(title: StringProtocol, text: Binding<String>)
还有一个带有 ViewModel 的 View,我很自然地认为我可以简单地传递我的 ViewModel@Published
作为绑定的属性:
class MyViewModel: ObservableObject {
@Published var title: String
@Published var text: String
}
// Now in my view
var body: some View {
TextField(title: myViewModel.title, text: myViewModel.$text)
}
但我显然不能,因为出版商不能充当约束力。据我了解,只有@State
财产可以这样做,但不应该所有@State
属性仅存在于视图中而不存在于视图模型中?或者我可以做类似的事情:
class MyViewModel: ObservableObject {
@Published var title: String
@State var text: String
}
如果我不能,当我的文本更新时,如何将信息传输到我的 ViewModel?
你就快到了。你只需更换myViewModel.$text
with $myViewModel.text
.
class MyViewModel: ObservableObject {
var title: String = "SwiftUI"
@Published var text: String = ""
}
struct TextFieldView: View {
@StateObject var myViewModel: MyViewModel = MyViewModel()
var body: some View {
TextField(myViewModel.title, text: $myViewModel.text)
}
}
TextField
期望一个Binding
(for text
参数)和StateObject
属性包装器负责创建绑定MyViewModel
使用动态成员查找的属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)