ios - 链接不同类型的 RxSwift observable

标签 ios swift rx-swift rx-cocoa

我需要从网络请求不同类型的模型,然后将它们组合成一个模型。 如何链接多个 observable 并返回另一个 observable?

我有这样的东西:

func fetchDevices() -> Observable<DataResponse<[DeviceModel]>>

func fetchRooms() -> Observable<DataResponse<[RoomModel]>>

func fetchSections() -> Observable<DataResponse<[SectionModel]>> 

我需要做类似的事情:

func fetchAll() -> Observable<(AllModels, Error)> {
    fetchSections()

    // Then if sections is ok I need to fetch rooms
    fetchRooms()

    // Then - fetch devices
    fetchDevices()

    // And if everything is ok create AllModels class and return it
    // Or return error if any request fails
    return AllModels(sections: sections, rooms: rooms, devices:devices)
  }

如何用RxSwift实现?我阅读了文档和示例,但了解如何链接具有相同类型的可观察对象

最佳答案

尝试 combineLatest 运算符。您可以组合多个可观察对象:

let data = Observable.combineLatest(fetchDevices, fetchRooms, fetchSections) 
    { devices, rooms, sections in
        return AllModels(sections: sections, rooms: rooms, devices:devices)
    }
    .distinctUntilChanged()
    .shareReplay(1)

然后,您订阅它:

data.subscribe(onNext: {models in 
    // do something with your AllModels object 
})
.disposed(by: bag)

关于ios - 链接不同类型的 RxSwift observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45471978/

相关文章:

ios - NSURLConnection GET方法

ios - 切换屏幕/ View Controller

ios - SKEmitterNode 没有从父级中删除自己?

对具有通用类型约束的 Observable 的 Swift 扩展

ios - 使用 GooglePlus 类从 NSDictionary 获取键值

javascript - react native 运行 ios 构建失败,因为 'LogSeverity'

ios - 使用 iOS 8 可操作通知启动应用程序

swift - 如何在 iOS 中更改动画 gif 图像的不透明度

swift - 如何让 RxSwift 自动完成在 Xcode 10.1 中工作?

ios - 如何在 MVVM 中存储 api 响应数据(非持久性)?