如何组合多个SignalProducers?

问题描述:

假设我有一堆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

嗯,是的,它使问题复杂化,你是对的 –

这里是你如何能做到这一点使用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]"