RxSwift:完成未知长度的可观察序列

时间:2017-12-10 21:36:49

标签: swift observable rx-swift

问题

我正在尝试在使用之前加载我的应用程序所需的所有数据。一旦我拥有了所有数据,我想在我的控制器中以一个成功或失败状态将一个事件发回我的订阅。

我正在努力想出一种在我的可观察链上发送onComplete状态的方法,以便我可以使用toArray()。也许有一种方法或者只是一种我没有想过的更好的方法。

加载工作流程

基本上我有三种不同的服务:版本,冠军和皮肤。

我检索最新版本并获得该版本的所有冠军。然后我下载冠军所拥有的每个皮肤的所有图像。

可观察链

我的LoadingViewModel中的可观察链是这样的:

return versionService.getLatest().flatMap({ (version: VersionData) in
    return championService.getChampions(forVersion: version)
}).flatMap({ (champions: [Champion]) -> Observable<Champion> in
    // Go through champions and update total skin count
    // emit each champion
}).flatMap({ (champion: Champion) -> Observable<Skin> in
    return skinService.getSkin(forChampion: champion)
}).toArray() // Doesn't work since I don't send complete
.flatMap({ (result: [Skin]) -> Observable<LoadingViewModelResult> in
    return Observable.just(LoadingViewModelResult.success)
})

如果我没有toArray()那么我会为每个皮肤发出一个LoadingViewModelResult.success,这会给我的视图控制器充满大量不必要的成功结果。

我尝试过什么

我尝试使用.take(count)传递皮肤计数的地方,但由于它被初始化为0,链条将立即取0并返回。

1 个答案:

答案 0 :(得分:0)

对于我的[Champion] -> Observable<Champion>Champion -> Observable<Skin>观察点,我需要在observer.onCompleted的创建中加入Observable