38

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

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

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

4

2 回答 2

42

您可以使用.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()
于 2016-02-04T16:50:08.127 回答
29

对于未来的读者:

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

每次任何可观察到的变化时,使用.combineLatest()都会返回一个发出完整列表的方法:Observable

let arrayOfObservables: [Observable<E>] = ...
let wholeSequence: Observable<[E]> = Observable.combineLatest(arrayOfObservables) { $0 }
于 2017-02-24T10:29:39.240 回答