2016-09-08 3 views
0

私は実際のサブスクリプションがある場合にのみ高価な操作を開始するだろうコールドオブザーバブルを作成したいと思います。 ReplaySubjectは、実際のサブスクリプションが行われたときに高価なバックグラウンド操作を開始できる必要があり、オブザーバブルの作成時には必要でない部分を除いてうまく収まります。そうする方法はありますか?いくつかの種類のonSubscribed { ... }メソッド。`ReplaySubject`を購読中にクロージャを実行させることは可能ですか?

let observable = Observable.of(1, 2) 
    .doOn(onSubscribe: { _ in 
     expensiveOperation() 
    }) 

observable 
    .subscribeNext { e in 
     print(e) 
    } 

Observable接続を作成し、doOn(onSubscribe:)分離:

Observableおよびサブスクリプションの間でだ doOn(onSubscribe:)に高価な操作を追加

:ここ

+0

observableで 'doOn'を使用できませんでしたか? http://reactivex.io/documentation/operators/do.html – sbarow

+0

'doOn'は、オブザーバブルがすでに暑いとき、つまりイベントを生成するときにトリガされます。イベントを生成するために 'doOn'を使用すると、それはうまくいかないでしょう。 – courteouselk

+0

そうですが、それはあなたの質問が求めていることです。サブスクリプション時にのみ操作を実行します。あなたの寒い目に見えるものが始まっているとき。彼はあなただけが 'doOn'を使うのではなく、' doOn'を使い、次に 'subscribe'を使うことを提案していました。 – solidcell

答えて

1

は、オプションのカップルです
let observable = Observable.of(1, 2) 
    .publish() 

observable 
    .doOn(onSubscribe: { _ in 
     expensiveOperation() 
    }) 
    .subscribe() 

observable 
    .subscribeNext { e in 
     print(e) 
    } 

observable.connect() 
+0

申し訳ありませんが、RxSwiftのインスタンスには 'doOn(onSubscribe:)'メソッドがありません。 onSubscribe: 'InSubscribe:{_ in ...}私は2.6.0を使用しています。あなたは現在のバージョンですか? – courteouselk

+0

これは3.0です。 .0 alpha1。doOnを使わない以外は、 "connectable"メソッドを使用することはできませんが、接続コールをラップして高価なメソッドメソッド。 – solidcell

+0

私は3.0.0.beta.1(とXCode 8 GM)に移動し、今は期待どおりに動作します。 – courteouselk

関連する問題