装订<;字符串?>;在SwiftUI视图文本字段上
我有以下视图模型:装订<;字符串?>;在SwiftUI视图文本字段上,swiftui,Swiftui,我有以下视图模型: struct RegistrationViewModel { var firstname: String? } 我想绑定TextField中的firstname属性,如下所示: TextField("First name", text: $registrationVM.firstname) .textFieldStyle(RoundedBorderTextFieldStyle()) 我不断得到一个错误,绑定是不允许的
struct RegistrationViewModel {
var firstname: String?
}
我想绑定TextField中的firstname属性,如下所示:
TextField("First name", text: $registrationVM.firstname)
.textFieldStyle(RoundedBorderTextFieldStyle())
我不断得到一个错误,绑定是不允许的 要绑定对象,您的变量需要符合一个新的包装器
@State
,@Binding
,@observeObject
,等等
因为您的RegistrationViewModel
不符合View
的要求,所以唯一的方法是让您的RegistrationViewModel
符合ObservieObject
class RegistrationViewModel: ObservableObject {
@Published var firstname: String?
}
完成后,您可以使用
@ObservedObject var resgistrationVM: RegistrationViewModel = RegistrationViewModel()
或作为@EnvironmentObject
此外,SwiftUI不能很好地与optionals配合使用,但扩展名可以很容易地处理这一问题
@State var firstname:String=”“
extension Optional where Wrapped == String {
var _bound: String? {
get {
return self
}
set {
self = newValue
}
}
public var bound: String {
get {
return _bound ?? ""
}
set {
_bound = newValue.isEmpty ? nil : newValue
}
}
}