【问题标题】:SwiftUI ViewModel published property and bindingSwiftUI ViewModel 发布的属性和绑定
【发布时间】: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?

【问题讨论】:

    标签: ios swift mvvm swiftui


    【解决方案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 的?
    猜你喜欢
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2021-01-13
    相关资源
    最近更新 更多