Ios RxSwift文本字段取消订阅未调用
当用户停止键入时,0.3秒后的更改应显示在标签中,但subscribe onNext未调用Ios RxSwift文本字段取消订阅未调用,ios,swift,rx-swift,Ios,Swift,Rx Swift,当用户停止键入时,0.3秒后的更改应显示在标签中,但subscribe onNext未调用 override func viewDidLoad(){ ... 设disposeBag=disposeBag() textfield.rx.text.orEmpty .debounce(.毫秒(300),调度程序:MainScheduler.instance) .subscribe(onNext:{[unowned self](文本)在 self.label.text=文本 }).处置(由:处置人) .
override func viewDidLoad(){
...
设disposeBag=disposeBag()
textfield.rx.text.orEmpty
.debounce(.毫秒(300),调度程序:MainScheduler.instance)
.subscribe(onNext:{[unowned self](文本)在
self.label.text=文本
}).处置(由:处置人)
...
}
使用Swift 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
将被解除分配,这将取消订阅。对我来说很好……它对我不起作用检查此视频,但为什么要在viewDidLoad()之外声明disposebagscope因为viewDidLoad()作用域将结束,所以包将变为零,从而释放流。如果行李处于父对象作用域级别,它将与对象一起释放。