如何从一组可观察对象创建一个数组的可观察对象?

时间:2016-02-04 16:42:15

标签: arrays swift rx-swift

我有一组Thing个对象,我想使用返回ConvertedThing的异步函数转换为Observable<ConvertedThing>个对象。

我想创建一个Observable<[ConvertedThing]>,在所有转化完成后会发出一个值。

如何实现这一目标?任何帮助非常感谢!

2 个答案:

答案 0 :(得分:33)

您可以使用.merge()将可观察数组合并到一个可观察对象中,然后使用.toArray()将它们作为单个事件中的列表。

对于RxSwift 3+使用:

let arrayOfObservables: [Observable<E>] = ...
let singleObservable: Observable<E> = Observable.from(arrayOfObservables).merge()
let wholeSequence: Observable<[E]> = singleObservable.toArray()

对于以前的版本:

let arrayOfObservables: [Observable<E>] = ...
let singleObservable: Observable<E> = arrayOfObservables.toObservable().merge()
let wholeSequence: Observable<[E]> = singleObservable.toArray()

答案 1 :(得分:18)

对于未来的读者:

当所有可观察序列完成时,使用.merge().toArray()将发出单个元素。如果任何可观察物不断发射,则不会发射或完成。

使用.combineLatest()将返回Observable,每次发生任何可观察的更改时都会发出完整列表:

let arrayOfObservables: [Observable<E>] = ...
let wholeSequence: Observable<[E]> = Observable.combineLatest(arrayOfObservables) { $0 }