Wim*_*mps 7 mvvm ios swift swiftui
我的问题可能是误解的结果,但我无法弄清楚,所以这里是:
当使用像 TextField 这样的组件或任何其他需要绑定作为输入的组件时
TextField(title: StringProtocol, text: Binding<String>)
Run Code Online (Sandbox Code Playgroud)
和一个带有 ViewModel 的视图,我自然地认为我可以简单地将我的 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)
}
Run Code Online (Sandbox Code Playgroud)
但我显然不能,因为出版商不能充当约束力。根据我的理解,只有一个@State属性可以这样做,但不是所有的@State属性都应该只存在于视图中而不是视图模型中吗?或者我可以做这样的事情:
class MyViewModel: ObservableObject {
@Published var title: String
@State var text: String
}
Run Code Online (Sandbox Code Playgroud)
如果我不能,当我的文本更新时,我如何将信息传输到我的 ViewModel?
sEl*_*yan 30
你快到了。你只需要替换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)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4463 次 |
| 最近记录: |