如何组合多个SignalProducers?

时间:2016-11-29 20:40:13

标签: swift reactive-cocoa

假设我在数组中有一堆SignalProducer

[SignalProducer<Car, NSError>]

如何将它们合并为一个等待所有SignalProducer的{​​{1}}并获取所有Car个?

SignalProducer<[Car], NSError>

使用案例:向端点http://cardatabase.com/:car_id发送网络请求以获取一堆汽车ID,从而获得多个Car个对象。问题是URLSession函数一次只能获得一个SignalProducer Car。问题是如何结合其中许多。

(编辑:Yikes,这让我想起了Haskell中的很多sequenceA。我可以在ReactiveSwift中做类似的事情吗?)

1 个答案:

答案 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]"