私はobservableを購読したいと思っていますが、いくつかのロジックでは、私はそれを再購読します。もし私が特別なロジックを書こうとしないなら、新しい購読を追加するとき、それを購読するこの観察可能なものが購読されているかどうかわかりますか?RxSwift監視対象を1回だけ購読するには?
0
A
答えて
1
なぜそれをしたいですか?あなたが特に解決しようとしている問題は何ですか?
サブスクリプションを処分する通常の方法は、処分バッグを使用することです。
func subscribeMyObservable()
{
disposeBag = DisposeBag()
myObservable
.subscribe(onNext: { print("Whatever") }
.addDisposableTo(disposeBag)
}
サブスクリプションの前にディスポーザブルを再作成する方法を教えてください。それは以前の購読を取り除くでしょう。
0
.switchLatest()オペレータはあなたの友達です
let eventObservableWrapper = PublishSubject<Observable<MyEvent>>()
let eventObservable = eventObservableWrapper.switchLatest() // use this one for subscriptions
// to switch to another observable, call -
eventObservableWrapper.onNext(someNewEventObservable)
は、スイッチがここにどのように機能するかについての詳細を参照してください - http://reactivex.io/RxJava/javadoc/rx/Observable.html#switchOnNext(rx.Observable)
0
あなたは - 私が間違って購読することでない場合にどうするかをしたいですし、一度項目が放出されると、購読を停止することはありません。
あなたが望むものなら、決して退会しないrelay
を使うことができます。
/**
* ReplayRelay it works just like hot observables, once that an observer subscribe, the Relay will replay all items already emitted
* to another observer.
* it should return 1,2,3,4,5 for both observers.
*/
@Test
public void testReplayRelay() {
ReplayRelay<String> relay = ReplayRelay.create();
relay.subscribe(result -> System.out.println("Observer1:" + result));
relay.call("1");
relay.call("2");
relay.call("3");
relay.subscribe(result -> System.out.println("Observer2:" + result));
relay.call("4");
relay.call("5");
}
あなたはここにhttps://github.com/politrons/reactive/blob/master/src/test/java/rx/relay/Relay.java
0
あなたが探しているもののための最も簡単な解決策は確かに彼らはただそのために提供される方法で、よりexmaplesを見ることができます - func take(_ count: Int)
。
onNext: 1
onCompleted
onDisposed
done
そして、はい、この場所で、あなたはストリームを介してイベントをフィルタ処理したい場所に便利です。
import RxSwift
var variable = Variable(1)
variable.asObservable().take(1).subscribe(
onNext: { print("onNext: \($0)") },
onError: { print("onError: \($0)") },
onCompleted: { print("onCompleted") },
onDisposed: { print("onDisposed") })
variable.value = 2
print("done")
結果は以下のとおりです。ここ
は、遊び場のサンプルですサブスクリプションを保存するのは面倒です。関連する問題
- 1. RxSwift - メソッドを購読する
- 2. Django autoreload:監視対象ファイルを追加
- 3. 監視対象ファイルに対するwebpackカスタムコマンドの変更
- 4. 私はCROSに空白の名前で監視対象ユーザーを作成することができるはずとクラッシュが空白の監視対象ユーザー
- 5. 監視対象のNagiosコンピュータのIPアドレスを取得する
- 6. 1回の購読でBraintreeの定期請求を避ける
- 7. 監視対象:flatMapがランダムにトリガーされない
- 8. ノックアウトカスタムバインディングが監視対象に更新されない
- 9. $同時に複数の属性を監視してコールバックを1回だけ実行する
- 10. PHP - ユーザーに対してタスクを1回だけ実行する
- 11. RxCache - 監視対象からの退去防止
- 12. 監視対象プロセスからの情報の取得
- 13. 反応性監視対象サブスクリプションの廃棄
- 14. Java Visual VMは、監視対象のJVMのパフォーマンスに影響しますか?
- 15. 監視対象のすべてのリスナーを観測可能な値に戻す
- 16. CSS - 1つのレイヤーだけを対象にしてください
- 17. 監視対象のデーモンツールが終了する理由を調べる方法
- 18. Angular 2ネストされた監視対象を作成する方法
- 19. RxJs - 購読対象の件名から次の件を呼ぶ
- 20. vueで監視対象が更新されないのはなぜですか?
- 21. なぜRxSwift購読は最初の起動viewWillAppearで一度だけ実行しますか?
- 22. 1日に1回だけデータを更新するには?
- 23. RxSwift/RxCocoaでUINavigationControllerの戻るボタンを購読します
- 24. Gangliaはメタノードと監視対象ノードの間で通信できません
- 25. は、対象クラスにない対象クラスのフィールドを無視します。 MapStruct
- 26. PythonでSQLite3でデータを1回だけ読み取る
- 27. Android v2.2-2.3.5:WebView:loadDataWithBaseURL:1回だけページを読み込みます
- 28. バックボーンコレクションイベントを1回だけ追加する
- 29. イテレータを1回だけ移動する
- 30. ボタンを1回だけリロードするクリック
私はダイナミックなアライブを購読する必要があるいくつかのロジックがありますので、時にはオブザーバブルを再購読することもありますので、新しい購読があれば特別な観測可能性があると思います。前の1つまたはいくつかの他のスマートな方法、今のところ、私のソリューションはあなたのようなものです。 – Bruno
'takeWhile'または' takeUntil'演算子を見ることができますが、これを行うための最良の方法は、私が記述した通りです。 – Odrakir