Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios RxSwift文本字段取消订阅未调用_Ios_Swift_Rx Swift - Fatal编程技术网

Ios RxSwift文本字段取消订阅未调用

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=文本 }).处置(由:处置人) .

当用户停止键入时,0.3秒后的更改应显示在标签中,但subscribe onNext未调用

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()作用域将结束,所以包将变为零,从而释放流。如果行李处于父对象作用域级别,它将与对象一起释放。