装订<;字符串?>;在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
        }
    }
}