我有一个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 }