переплет в SwiftUI View TextField - PullRequest
       2

переплет в SwiftUI View TextField

0 голосов
/ 12 февраля 2020

У меня есть следующая модель представления:

struct RegistrationViewModel {

    var firstname: String?
}

Я хочу связать свойство firstname в TextField, как показано ниже:

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

Я получаю ошибку, что Binding is не положено.

1 Ответ

1 голос
/ 12 февраля 2020

Чтобы связать объекты, ваша переменная должна соответствовать одной из новых оболочек @State, @Binding, @ObservableObject, et c.

Поскольку ваш 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 Дополнительный 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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...