2016-11-29 2 views
3

は、私は、配列にSignalProducer Sの束を持っていると仮定します。複数のSignalProducersを結合するにはどうすればよいですか?

[SignalProducer<Car, NSError>] 

私はそれらのすべてを待って、すべてのCar Sを取得1 SignalProducerを得るためにそれらを結合するにはどうすればよいですか?

SignalProducer<[Car], NSError> 

ユースケース:車のIDの束のためのエンドポイントhttp://cardatabase.com/:car_idにネットワーク要求を行いますので、複数のCarオブジェクトを取得します。問題は、URLSession関数は、一度にCarの1つにつきSignalProducerしか得られないということです。問題はそれらの多くをどのように組み合わせるかです。

(編集:。?む〜、これは私のHaskellではsequenceAの多くを連想させる私はReactiveSwiftで同様のことを行うことができます)

+0

あなたはジップがタプルで、要素の特定の数のためであるので、私はそうは思いません@VictorSigler反応-ココア –

+0

で 'zip'オペレータを探しています。私は実行時にのみ既知の長さの配列を持っています。 –

+0

ええ、はい、それは問題を複雑にする、あなたは正しい –

答えて

4

ここでは、flatten(_:)reduce(_:, _:)を使用して、これを行うことができる方法の例です。

let firstProducer = SignalProducer<Int, NoError>(value: 0) 
let secondProducer = SignalProducer<Int, NoError>(value: 1) 
let thirdProducer = SignalProducer<Int, NoError>(value: 2) 

SignalProducer<SignalProducer<Int, NoError>, NoError>(values: [firstProducer, secondProducer, thirdProducer]) 
    .flatten(.merge) 
    .reduce([]) { $0 + [$1] } 
    .startWithValues { print($0) } //prints "[0, 1, 2]" 
関連する問題