RxSwift Textfield debounce подписаться не звонит - PullRequest
0 голосов
/ 01 июля 2019

Изменения через 0,3 секунды, когда пользователь должен перестать набирать текст в ярлыке, но подписка onNext не вызывает

override func viewDidLoad() {
    ...
    let disposeBag = DisposeBag()
    textfield.rx.text.orEmpty
        .debounce(.milliseconds(300), scheduler: MainScheduler.instance)
        .subscribe(onNext: { [unowned self] (text) in
            self.label.text = text
        }).disposed(by: disposebag)
    ...
}

Использование Swift 5

pod 'RxSwift', '~> 5'
pod 'RxCocoa', '~> 5'

1 Ответ

4 голосов
/ 01 июля 2019

Решение состоит в том, чтобы объявить disposebag вне области действия viewDidLoad():

let disposebag = DisposeBag()

override func viewDidLoad() {
    super.viewDidLoad()

    ...

    textfield.rx.text.orEmpty
        .debounce(.milliseconds(1000), scheduler: MainScheduler.instance)
        .subscribe(onNext: { [unowned self] (text) in
            self.label.text = text
            print("Yo")
        }).disposed(by: disposebag)
}

Поскольку в вашем коде disposebag находится внутри области действия viewDidLoad(), после завершения этого метода освобождается disposebag, что отменяет подписку.

...