RxSwift: ошибка при добавлении привязки RX к UITextField: значение типа "Binder <String?>" Не имеет члена "debounce"
Я пытаюсь добавить задержку в UITextField, но получаю следующую ошибку:
Property 'text' requires that 'UITextField' inherit from 'UILabel'
Value of type 'Binder<String?>' has no member 'debounce'
Вот моя реализация:
func bind() {
(myTextField.rx.text.debounce(0.5, scheduler: MainScheduler.instance) as AnyObject)
.map {
if $0 == ""{
return "Type your name bellow"
}else {
return "Hello, \($0 ?? "")."
}
}
.bind(to: myLbl.rx.text)
.disposed(by: disposeBag)
}
Кто-нибудь из вас знает, почему я получаю эту ошибку?
Я очень признателен за вашу помощь.
1 ответ
myTextField.rx.text
это ControlProperty<String?>
, а иногда длинные цепочки могут вызвать у компилятора Swift проблемы с распознаванием того, что вы пытаетесь выполнить. Лучше заявить о своем намерении и разбить длинные цепочки на переменные:
func bind() {
// The way you wanted to do it
let property: ControlProperty<String> = _textField.rx.text
.orEmpty
// Your map here
property
.debounce(.milliseconds(500), scheduler: MainScheduler.instance)
.bind(to: _descriptionLabel.rx.text)
.disposed(by: _disposeBag)
// Driver is a bit better for UI
let text: Driver<String> = _textField.rx.text
.orEmpty
// Insert your map here
.asDriver()
text
.debounce(.milliseconds(500))
.drive(_descriptionLabel.rx.text)
.disposed(by: _disposeBag)
}
PS Используя Driver
избавит вас от набора текста для пользовательского интерфейса и сделает его немного понятнее.