RxSwift Textfield debounce subscribe 没有调用
RxSwift Textfield debounce subscribe is not calling
用户停止输入 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'
解决方案是在 viewDidLoad()
范围之外声明 disposebag
:
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
将被释放,从而取消订阅。
用户停止输入 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'
解决方案是在 viewDidLoad()
范围之外声明 disposebag
:
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
将被释放,从而取消订阅。