如何组合多个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做类似的事情?)
答
这里是你如何能做到这一点使用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]"
您正在寻找无-可可 –
的'zip'操作@VictorSigler我不这么认为,因为拉链是元素的具体数量,在一个元组。我有一个只在运行时已知的长度的数组。 –
嗯,是的,它使问题复杂化,你是对的 –