假设我在数组中有一堆SignalProducer
:
[SignalProducer<Car, NSError>]
如何将它们合并为一个等待所有SignalProducer
的{{1}}并获取所有Car
个?
SignalProducer<[Car], NSError>
使用案例:向端点http://cardatabase.com/:car_id
发送网络请求以获取一堆汽车ID,从而获得多个Car
个对象。问题是URLSession
函数一次只能获得一个SignalProducer
Car
。问题是如何结合其中许多。
(编辑:Yikes,这让我想起了Haskell中的很多sequenceA
。我可以在ReactiveSwift中做类似的事情吗?)
答案 0 :(得分:5)
以下是使用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]"