ios - RxSwift Textfield debounce subscribe 没有调用
问题描述
用户停止输入时 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)
...
}
使用斯威夫特 5
pod 'RxSwift', '~> 5'
pod 'RxCocoa', '~> 5'
解决方案
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
就会释放 ,从而取消订阅。
推荐阅读
- spring - 如何使用 JPA EntityListener 获取相关表?
- mysql - 计数子句 -> 不正确的计数值
- wordpress - 添加优惠券代码(wordpress)后如何刷新/重新加载 WooCommerce 结帐页面?
- vue.js - 在 Vue 应用程序中的何处放置代码以在应用程序初始加载时提取数据
- typescript - 在 DB 中获取一个 id 数组,$lookup 到另一个具有相同 id 的集合,并通过 id 投影数据 - mongoose 与 TS
- ruby-on-rails - 在多个地方使用刺激控制器
- bash - 将变量从主脚本转移到从第一个脚本开始的不同 shell
- javascript - Vue排序数组后跟索引(0、1、2、3 ...)
- tensorflow - ImageDataGenerator 是如何工作的?
- jquery - 如何同时使用 Select2 作为可搜索的下拉菜单或文本框?