首页 > 解决方案 > 捆绑在 SwiftUI 视图 TextField 上

问题描述

我有以下视图模型:

struct RegistrationViewModel {

    var firstname: String?
}

我想在 TextField 中绑定 firstname 属性,如下所示:

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

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

标签: swiftui

解决方案


要绑定对象,您的变量需要符合新的包装器@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 可选文本字段

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

推荐阅读