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

How do I create an observable of an array from an array of observables?

我有一个包含 Thing 个对象的数组,我想使用 returns Observable<ConvertedThing>.

的异步函数将其转换为 ConvertedThing 个对象

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

如何实现?非常感谢任何帮助!

您可以使用 .merge() to combine the array of observables into a single observable, and then use .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()

对于未来的读者:

使用 .merge() and .toArray() 将在所有可观察序列完成时发出单个元素。如果任何 observables 持续发射,它将不会发射或完成。

使用 .combineLatest() 将 return 一个 Observable 每次任何可观察到的变化都会发出完整列表:

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