let stream = PublishSubject<Int>()
let trigger = PublishSubject<Void>()
stream.sample(trigger).subscribeNext { value in print("value \(value)") }
stream.onNext(5)
trigger.onCompleted()
以上打印&#34;值5&#34;到控制台。我发现这令人惊讶,因为我从未在触发器上调用onNext()。
在我的情况下,trigger
表示保存按钮rx_tap
,stream
表示要保存的有效输入。我的问题是,当触发器完成时(在销毁时)流就会被保存,即使它没有被轻击。
答案 0 :(得分:1)
嗯,sample
确实会触发onCompleted
你可以在这里查找:
http://reactivex.io/documentation/operators/sample.html
在您的情况下,它的工作正常。
通常情况下,当您将observers
添加到DisposeBag
时,它将在行李处理时处理。
例如:当ViewControllers或ViewModels为deinit
时...
所以,解决方案就是不要调用onCompleted
来处置observers
stream.sample(trigger)
.subscribeNext { value in print("value \(value)") }
.addDisposableTo(disposeBag)
stream.onNext(5)