Проверка формы в реактивном какао
Я пытаюсь проверить форму, которая имеет несколько текстовых полей. Но я могу наблюдать только когда оба текстовых поля редактируются...
let validUserNameSignal =
self.nameTextField
.reactive
.continuousTextValues
.skipNil()
.map({ $0.characters.count > 3 })
let pwdPasswordFieldSignal =
self.lastnameTextField.reactive
.continuousTextValues
.skipNil()
.map({$0.characters.count > 3})
let formValidation = validUserNameSignal.combineLatest(with: pwdPasswordFieldSignal)
formValidation.observeValues { (userNameResult,pwdResult) in
print(userNameResult)
print(pwdResult)
}
У меня все хорошо, или есть другой способ?
2 ответа
Решение
Вот пример реализации базового ViewController, я убрал несколько вещей, которые, я думаю, можно было бы сделать лучше.
class ViewController: UIViewController {
@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
func nameValidation(for field: UITextField) -> Signal<Bool, NoError> {
return field
.reactive
.continuousTextValues
.skipNil()
.map { $0.characters.count > 3 }
}
override func viewDidLoad() {
super.viewDidLoad()
let validUserNameSignal = nameValidation(for: nameTextField)
let lastNameFieldSignal = nameValidation(for: lastNameTextField)
let formValidation =
SignalProducer(signal: validUserNameSignal.combineLatest(with: lastNameFieldSignal))
.map { $0 && $1 }
.prefix(value: false)
formValidation.startWithValues {
print($0)
}
}
}
continuousTextValues
это Signal
, который имеет горячую семантику. Это означает, что он излучает только те изменения, которые произошли после наблюдения.
Возможно, вы захотите включить formValidation
сигнал в производителя, и префикс значения по умолчанию.
SignalProducer(signal: formValidation)
.map { $0 && $1 }
.prefix(value: false)
.startWithValues { ... }