我有一组Thing
个对象,我想使用返回ConvertedThing
的异步函数转换为Observable<ConvertedThing>
个对象。
我想创建一个Observable<[ConvertedThing]>
,在所有转化完成后会发出一个值。
如何实现这一目标?任何帮助非常感谢!
答案 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 }