【问题标题】:Binding<String?> on the SwiftUI View TextFieldSwiftUI 视图 TextField 上的绑定<String?>
【发布时间】:2020-02-12 01:14:50
【问题描述】:

我有以下视图模型:

struct RegistrationViewModel {

    var firstname: String?
}

我想在TextField中绑定firstname属性如下图:

 TextField("First name", text: $registrationVM.firstname)
                      .textFieldStyle(RoundedBorderTextFieldStyle())

我不断收到不允许绑定的错误。

【问题讨论】:

  • @State var firstname: String = ""

标签: swiftui


【解决方案1】:

要绑定对象,您的变量需要符合新包装器之一 @State、@Binding、@ObservableObject 等。

因为你的RegistrationViewModel 不符合View,唯一的办法就是让你的RegistrationViewModel 符合ObservableObject。

class RegistrationViewModel: ObservableObject {

    @Published var firstname: String?
}

完成后,您可以使用

调用它View
@ObservedObject var resgistrationVM: RegistrationViewModel = RegistrationViewModel()

或@EnvironmentObject

https://developer.apple.com/tutorials/swiftui/handling-user-input

此外,SwiftUI 不能很好地处理可选参数,但 extension 可以轻松处理。

SwiftUI Optional TextField

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
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 2011-02-15
    • 2022-06-28
    • 1970-01-01
    相关资源
    最近更新 更多