我有一个Thing对象数组,我想ConvertedThing使用返回的异步函数将其转换为对象Observable<ConvertedThing>。
我想创建一个Observable<[ConvertedThing]>在所有转换完成后发出一个值的。
如何实现?非常感谢任何帮助!
您可以使用.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()
对于未来的读者:
当所有可观察序列完成时,使用.merge()and.toArray()将发出单个元素。如果任何 observables 持续发射,它就不会发射或完成。
每次任何可观察到的变化时,使用.combineLatest()都会返回一个发出完整列表的方法:Observable
let arrayOfObservables: [Observable<E>] = ...
let wholeSequence: Observable<[E]> = Observable.combineLatest(arrayOfObservables) { $0 }