2017-11-01 9 views
0

複数のデータソースに対してアクションを実行するためにRxSwiftを使用しようとしています。しかし、私はどのように次のことを達成するための考えがありません。それぞれの出力が次の入力であるオブザーバブルの配列

私は、それぞれの出力が次の入力でなければならないという観測の配列を持っています。だから、私は、最初のものを観測可能にし、結果を待って次のものに渡し、配列の終わりに至るまで最終的な値を返すような何かをしたい。

これは可能ですか?前もって感謝します。

***アップデート:要望に応じて、具体的に説明します。

私が配列で使用している 'observables'はカスタムです。私はObservable.create { ... }を返す関数を使用します。クロージャの内部では、値を変換した非同期操作を実行し、完了する前にオブザーバに結果を送信します。その結果の値は、次の観測値に渡されなければならず、最終的な値を得るためには、配列内の最後の観測可能値まで続きます。

観測値は複数の値を送信することがありますが、観測値は1つの観測値から次の観測値まで、組立ラインのように渡さなければなりません。

+0

あなたはより特異的であり得る:

うまくいけば、これはあなたが始めることができますか?結果を待って次のものに渡すのはどういう意味ですか? Observablesは定義によって0..n "results"を生成します。したがって、すべての結果または1つの特定の結果ですか?つまり、「最終的な価値」は何ですか? –

+0

あなたの質問に投稿するコードがあればうれしいでしょう。今あなたの説明が意味をなさない - あなたが観測可能な配列を持っていれば、**の出力を次の "入力"に渡すことはできない** - 観測値は "入力"を持たない。観察者は行いますが、出力はありません。被験者は両方を持っていますが、それはあなたが記述したものではありません。 – Enigmativity

+0

"結果の値は、次の観測可能な値に渡す必要があります" - これは「継続継承スタイル(CPS)」と呼ばれ、一般的な関数プログラミングや特にRxの制御フローを記述します。あるオブザーバブルから他の_observables_に変換された_values_は、* .flatMap()*演算子によって変換されます。しかし、多くの他の演算子がありますが、あなたの選択を知るためにそれらを事前に学ぶ方が良いです - http://rxmarbles.com/で概要を参照してください。 –

答えて

0

Observableは入力が正確ではないので、あなたが求めているものを正確に知ることは難しいですが、これはよくある問題だと思います。

Observableから放出された値からデータを集めることができるconcatまたはreduce演算子の組み合わせを検索している可能性があります。 ReactiveX's documentation for Mathematical and Aggregate Operatorsを参照してください。

// "I have an array of observables..." 
let one = Observable.deferred { Observable.just(1) } 
let two = Observable.deferred { Observable.just(2) } 
let observables = [one, two] 

// "the output of each, should be the input of the next" 
// this is problematic, because observables do not strictly have inputs. 
let resultsFromEach = Observable.concat(observables) 

resultsFromEach 
    .reduce(0) { result, next in 
     result + 1 
    } 
    .debug("result") 
    .subscribe() 
+0

こんにちは、私はちょうど質問を編集した、私は自分自身を正しく説明していないと思う。ご協力いただきありがとうございます。 – OscarVGG

関連する問題