2016-04-24 21 views
3
let stream = PublishSubject<Int>() 
let trigger = PublishSubject<Void>() 

stream.sample(trigger).subscribeNext { value in print("value \(value)") } 

stream.onNext(5) 
trigger.onCompleted() 

上面將「value 5」打印到控制檯。我發現這很令人驚訝,因爲我從來沒有在觸發器上調用onNext()。`樣本`完成後觸發。如何避免?

在我的情況下,trigger代表保存按鈕rx_tap,而stream代表要保存的有效輸入。我的問題是,當觸發器完成時(銷燬時)即使未點擊該流,也會保存流。

回答

1

好,sample確實引發onCompleted雖然
你可以看看它在這裏: http://reactivex.io/documentation/operators/sample.html

它將按預期在您的案件。

正常情況下,當您將observers添加到DisposeBag時,它將在袋子處理時進行處理。
例如:當ViewControllers或者是的ViewModels ED deinit ...

因此,解決方案就是不叫onCompleted處置observers

stream.sample(trigger) 
     .subscribeNext { value in print("value \(value)") } 
     .addDisposableTo(disposeBag) 

stream.onNext(5) 
相關問題