在 RxSwift 中将 [Observable<T>] 转换为 Observable<[T]>

Posted

技术标签:

【中文标题】在 RxSwift 中将 [Observable<T>] 转换为 Observable<[T]>【英文标题】:Convert [Observable<T>] to Observable<[T]> in RxSwift 【发布时间】:2019-09-01 12:09:31 【问题描述】:

这是我的实现。

我有favCitiesID = Observable&lt;[Int]&gt;,它将是 flatMap 和地图。每个城市 ID 都将用于返回 Observable&lt;CityMappable&gt; 的 API 调用。我已经到了可以获取[Observable&lt;CityMappable&gt;] 的地步,但我想将其转换为Observable&lt;[CityMappable]&gt;,以便将其绑定到tableview 数据源。

let favCitiesID: Observable<[Int]> = Observable.of([0,1,2])

let observableCities = favCitiesID.flatMap  cityIds -> Observable<[CityMappable]> in
        return cityIds.map return self.apiManager.getCurrentWeatherData(for: $0)

这是 APIManager 函数定义

func getCurrentWeatherData(for cityID: Int)->Observable<CityMappable>

【问题讨论】:

【参考方案1】:

您可以使用 combine 将 [Observable&lt;CityMappable&gt;] 转换为 Observable&lt;[CityMappable]&gt;

试试这个代码

let observableCities = favCitiesID.flatMap  cityIds -> Observable<[CityMappable]> in
    let obs = cityIds.map return self.apiManager.getCurrentWeatherData(for: $0)
    return Observable.combineLatest(obs)

【讨论】:

非常感谢!!有用。现在我要去学习 combineLatest 是如何工作的。 这是一篇关于组合两个或多个 Observable 的不同方法的文章。 medium.com/@danielt1263/…

以上是关于在 RxSwift 中将 [Observable<T>] 转换为 Observable<[T]>的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift 将 Observable<String> 转换为 String

如何在 Observable.create (RxSwift) 中返回/转发一个 observable

如何在 RxSwift 中取消订阅 Observable?

RxSwift:延迟 observable 直到另一个 observable 完成?

如何在 RxSwift 中组合多个 Observable

Observable<Bool> If else 在 RxSwift