如何组合多个SignalProducers?

cod*_*321 4 reactive-cocoa swift

假设我SignalProducer在数组中有一堆s:

[SignalProducer<Car, NSError>]
Run Code Online (Sandbox Code Playgroud)

我如何将它们结合起来以获得一个SignalProducer等待所有这些并得到所有Cars的?

SignalProducer<[Car], NSError>
Run Code Online (Sandbox Code Playgroud)

使用案例:向端点请求http://cardatabase.com/:car_id一堆车ID,从而获得多个Car对象.问题是,该URLSession功能只能得到SignalProducer一个Car在一段时间.问题是如何结合其中许多.

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

Lot*_*lla 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]"
Run Code Online (Sandbox Code Playgroud)