ios - 使用 SwiftUI 绑定(bind) ViewModel 和 TextFields

标签 ios swiftui combine

我正在寻找在 textfieldsViewModel 之间创建绑定(bind)的最佳方法。 目前,我正在为每个文本字段创建一个 @State ,并在需要时手动将值从文本字段发送到 viewModel 属性。我很确定这不是最好的方法...有没有办法将 TextFieldViewModel 属性绑定(bind)?

这是我当前的代码:

struct SigninView: View {
    @State var username:String = ""
    @State var password:String = ""

    var viewModel:SignInViewModel

    var body: some View {
        VStack(alignment: .leading, spacing: 15.0){

            DefaultTextField(placeholder: "username", value: $username)
            DefaultTextField(placeholder: "password", value: $password)

            Spacer()

            FillButton(title:"Sign In"){
                ///// IS THIS CORRECT?
                self.viewModel.email = self.username
                self.viewModel.password = self.password
                //------------------
                self.viewModel.signin()
            }
        }.padding()
    }
}

View 模型类似于:

class SignInViewModel:ObservableObject{

    var username:String? = nil
    var password:String? = nil

最佳答案

我认为我们可以用下面的代码来简化它。

class SignInViewModel: ObservableObject{
    @Published var username = ""
    @Published var password = ""
}


struct SigninView: View {
    @ObservedObject var viewModel = SignInViewModel()

    var body: some View {
        VStack(alignment: .leading, spacing: 15.0){

            TextField("username", text: $viewModel.username)
            TextField("password", text: $viewModel.password)

            Spacer()

            Button("Sign In"){
                print("User: \(self.viewModel.username)")
                print("Pass: \(self.viewModel.password)")
            }
        }.padding()
    }
}

关于ios - 使用 SwiftUI 绑定(bind) ViewModel 和 TextFields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59565999/

相关文章:

ios - 检测选定 UITabbarItem 上的重新制表符

html - 如何在 UIWebView 中显示 HTML 代码?

iphone - glBindRenderbufferOES和glBindRenderbuffer有什么区别?

Xcode 11 beta 5 中的 Path.fill 不再有效

ios - 为 "Any iOS Device"构建 Swift 包时找不到 SwiftUI 或 Combine 类型

ios - 在 ScrollView SwiftUI 中添加时列表隐藏

ios - swift ios 以编程方式设置 PageViewController 的过渡样式和方向

swiftui - 当包含文本字段的工作表出现时,如何使文本字段成为焦点

快速组合 : How can I convert `AnyPublisher<[Foo], *>` to `AnyPublisher<Foo, *>` ?

swift - 模拟并注入(inject) ObservableObject