【问题标题】:How do I create an observable of an array from an array of observables?如何从一个可观察的数组中创建一个可观察的数组?
【发布时间】:2016-05-14 09:33:50
【问题描述】:

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

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

如何做到这一点?非常感谢任何帮助!

【问题讨论】:

    标签: arrays swift rx-swift


    【解决方案1】:

    对于未来的读者:

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

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

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

    【讨论】:

    • Observable 完成与否的细节影响很大,感谢您的指出。 kennytm 的解决方案仅在您的Observables 完成时才有效;否则使用combineLatest()
    【解决方案2】:

    您可以使用 .merge() 将 observable 数组组合成一个 observable,然后使用 .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()
    

    【讨论】:

    • 我的出发点是一组可观察对象,而不是单个对象。所以我想从[Observable&lt;ConvertedThing&gt;]Observable&lt;[ConvertedThing]&gt;
    • @Paul:对不起。已更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    相关资源
    最近更新 更多