Ошибка RxSwift: свойство "текст" требует, чтобы "UITextField" унаследовал от "UILabel" - PullRequest
2 голосов
/ 29 мая 2020
func bindSearchTextField() {
        searchTextField.rx.text.asObservable().skip(3)
            .debounce(0.3, scheduler: MainScheduler.instance)
            .subscribe(onNext: { [weak self] searchText in
                guard let strongSelf = self else {
                    return
                }
                if let text = searchText {
                    if text == "" {
                        self?.hideLoader()
                        self?.clearButton.isHidden = true
                    } else {
                        self?.clearButton.isHidden = false
                    }
                    strongSelf.presenter?.getAreaCodeList(text: text)
                }
            }).disposed(by: disposeBag)
    }

Я получаю эту ошибку после того, как обновил свой RxSwift до последней версии (с 4.4.0 до 5.1.1). Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 29 мая 2020

Используйте вместо него: .debounce(.milliseconds(300), scheduler: MainScheduler.instance). debounce(_:scheduler:), который принимает Double, был удален.

Кроме того, вы слишком много делаете в своей подписке. Вам будет лучше, если вы разделите подписку на независимые блоки:

let searchText = searchTextField.rx.text.asObservable().skip(3)
    .debounce(.milliseconds(300), scheduler: MainScheduler.instance)
    .compactMap { $0 }

searchText
    .map { $0.isEmpty }
    .bind(to: clearButton.rx.isHidden)
    .disposed(by: disposeBag)

searchText
    .bind { [presenter] in
        presenter?.getAreaCodeList(text: $0)
    }
    .disposed(by: disposeBag)
...