如何组合多个 SignalProducers?
How to combine multiple SignalProducers?
假设我在数组中有一堆 SignalProducer
s:
[SignalProducer<Car, NSError>]
我如何将它们组合起来得到一个 SignalProducer
等待所有这些并获得所有 Car
s?
SignalProducer<[Car], NSError>
用例:向端点http://cardatabase.com/:car_id
发出网络请求以获得一堆汽车ID,从而获得多个Car
对象。问题是 URLSession
函数一次只能为一个 Car
获取一个 SignalProducer
。问题是如何将它们中的许多组合起来。
(编辑:哎呀,这让我想起了很多 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([]) { [=10=] + [] }
.startWithValues { print([=10=]) } //prints "[0, 1, 2]"
假设我在数组中有一堆 SignalProducer
s:
[SignalProducer<Car, NSError>]
我如何将它们组合起来得到一个 SignalProducer
等待所有这些并获得所有 Car
s?
SignalProducer<[Car], NSError>
用例:向端点http://cardatabase.com/:car_id
发出网络请求以获得一堆汽车ID,从而获得多个Car
对象。问题是 URLSession
函数一次只能为一个 Car
获取一个 SignalProducer
。问题是如何将它们中的许多组合起来。
(编辑:哎呀,这让我想起了很多 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([]) { [=10=] + [] }
.startWithValues { print([=10=]) } //prints "[0, 1, 2]"