RxSwift Textfield 去抖动订阅未调用

Sal*_*500 0 ios swift rx-swift

用户停止输入 0.3 秒后的更改应显示在标签中,但 subscribe 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)
    ...
}

Run Code Online (Sandbox Code Playgroud)

使用Swift 5

pod 'RxSwift', '~> 5'
pod 'RxCocoa', '~> 5'
Run Code Online (Sandbox Code Playgroud)

iel*_*ani 6

解决方案是disposebagviewDidLoad()范围之外声明:

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)
}
Run Code Online (Sandbox Code Playgroud)

由于在您的代码中,disposebag生命在viewDidLoad()范围内,因此一旦此方法结束,将disposebag被取消分配,从而取消订阅。