SwiftUI ViewModel 发布的属性和绑定
Posted
技术标签:
【中文标题】SwiftUI ViewModel 发布的属性和绑定【英文标题】:SwiftUI ViewModel published property and binding 【发布时间】:2020-08-11 15:37:30 【问题描述】:我的问题可能是误会的结果,但我想不通,所以在这里:
当使用像 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?
【问题讨论】:
【参考方案1】:你快到了。您只需将myViewModel.$text
替换为$myViewModel.text
。
class MyViewModel: ObservableObject
var title: String = "SwiftUI"
@Published var text: String = ""
struct TextFieldView: View
@ObservedObject var myViewModel: MyViewModel = MyViewModel()
var body: some View
TextField(myViewModel.title, text: $myViewModel.text)
【讨论】:
你能详细说明这是如何工作的吗? $myViewModel.text 是如何满足@Binding 的?以上是关于SwiftUI ViewModel 发布的属性和绑定的主要内容,如果未能解决你的问题,请参考以下文章
如何为用作 DataGrid 的 ItemsSource 的项目的集合属性中的每个项目生成和绑定一列