У меня есть текстовое поле, в котором есть 2 правила проверки: минимальное количество символов и буквенно-цифровые символы.
Я хочу иметь возможность представлять пользователю, что он делает неправильно в метке ошибки, но проблема в том, что если я связываю текстовое поле с обоими правилами, это может быть жутко, потому что, как только одно правило будет утверждено, пользовательский интерфейс делает немного мерцает от цвета разделителя, например, меняется с красного на зеленый на красный из-за сбоя другой проверки.
Я хотел бы знать, есть ли способ расставить приоритеты одного связывания над другим. Например, это то, что у меня сейчас есть:
let minimumValidator
= inputField.textField
.rx.text.orEmpty.map { $0.count >= 8 } // Min amount of chars is 8
minimumValidator.bind(to: inputField.rx.minimumChars)
.disposed(by: bag)
let regexValidator
= inputField.textField
.rx.text.orEmpty.map { $0.matches(regex) }
regexValidator.bind(to: inputField.rx.regex)
.disposed(by: bag)
rx.minimumChars и rx.regex являются пользовательскими связывателями
var minimumChars: Binder<Bool> {
return Binder(self.base) { control, value in
UIView.animate(withDuration: 0.1) {
if value {
control.separator.backgroundColor = .white
control.errorLabel.isHidden = true
} else {
let error = "Needs more characters"
control.separator.backgroundColor = .red
control.errorLabel.text = error
control.errorLabel.isHidden = false
}
}
}
}
Так что моя идея состоит в том, чтобы расставить приоритеты для idk ... скажем, буквенно-цифровая проверка - поэтому будет отображаться ошибка от минимального символа до появления буквенно-цифровой ошибки, поэтому, пока пользователь не разрешит буквенно-цифровую проверку, он будет игнорировать другой поток из минимального количества символов. Я почти уверен, что мне не хватает какой-то комбинации combLatest с merge или idk.