Search code examples
iosxcoderx-swiftrx-cocoa

RxSwift Error: Property 'text' requires that 'UITextField' inherit from 'UILabel'


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)
    }

I'm getting this error after i updated my RxSwift to latest version (from 4.4.0 to 5.1.1). Can anyone help me here?


Solution

  • Use: .debounce(.milliseconds(300), scheduler: MainScheduler.instance) instead. The debounce(_:scheduler:) that takes a Double has been removed.

    Also, you are doing too much in your subscribe. You are better off if you break the subscribe up into independent units:

    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)