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

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

stream.onNext(5) 
trigger.onCompleted() 

上記の値はコンソールに表示されます。私はトリガーでonNext()を呼び出したことがないので、それは驚くべきことです。完了時に `sample`が起動します。避ける方法?

私の場合、triggerは保存ボタンrx_tapを表し、streamは保存される有効な入力を表します。私の問題は、タップされていなくてもトリガーが完了すると(破棄時に)ストリームが保存されていることです。 http://reactivex.io/documentation/operators/sample.html

あなたのケースで期待どおりに動作します:

答えて

1

まあ、sampleはあなたがここでそれを見ることができます
もののonCompletedをトリガしません。

通常、DisposeBagobserversを追加すると、バッグが廃棄されるときに処分されます。 ViewControllersかのviewmodelsがdeinit編です...

ので、解決策はただobservers

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

stream.onNext(5) 
を配置する onCompletedを呼び出すことはありませんです。例えば
関連する問題