2016-11-29 57 views
3

假設我有一堆SignalProducer S IN的數組:如何組合多個SignalProducers?

[SignalProducer<Car, NSError>] 

如何結合他們得到一個SignalProducer是等待所有這些,得到所有的Car S'

SignalProducer<[Car], NSError> 

使用案例:做一個網絡請求的一堆車標識的端點http://cardatabase.com/:car_id從而獲得多個Car對象。問題是URLSession函數一次只能得到一個SignalProducer一個Car。問題是如何結合其中的許多。

(編輯:哎呀,這讓我想起了很多在Haskell sequenceA我可以在ReactiveSwift做類似的事情?)

+0

您正在尋找無-可可 –

+0

的'zip'操作@VictorSigler我不這麼認爲,因爲拉鍊是元素的具體數量,在一個元組。我有一個只在運行時已知的長度的數組。 –

+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]"