我正在寻找在 textfields
和 ViewModel
之间创建绑定(bind)的最佳方法。
目前,我正在为每个文本字段创建一个 @State
,并在需要时手动将值从文本字段发送到 viewModel 属性。我很确定这不是最好的方法...有没有办法将 TextField
与 ViewModel
属性绑定(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/