swift - 如何从另一个可观察数组中获取详细数组

标签 swift rx-swift

我是 RxSwift 的初学者,一般来说我会尝试将两个不同的操作与我的 REST API 链接起来以获得所有详细的产品。

我包装了一些 REST API 以返回 RxSwift Observable,一个返回产品列表,另一个返回产品详细信息。

class API {
    func listProduct() -> Observable<[Product]> { ... }
    func detailProdcut(code: Int) -> Observable<[ProductDetail]> { ... }
}

现在我想从产品列表中获取产品详细信息,我该如何以 Rx 方式执行此操作?我正在尝试做类似的事情

API.init().listProduct()
    .flapMap { products -> <Product> in return products[0] }
    .map { product in API.init(product.code) }
    .merge()
    .toArray

但这行不通,我很困惑如何将一个产品代码列表转换为一系列产品详细信息

最佳答案

let api = API()

let productDetails = api.listProducts()
  .flatMap { products in
    let productsObservable = Observable.from(products)
    let productDetails = productsObservable.flatMap { api.detail(product($0.code) }

    return productDetails.toArray()
  }

这里发生了什么:

  • flatMap有专门的类型[Product] -> Observable<[ProductDetails]> .如何?继续阅读。

  • Observable.from 采用 swift 数组并将其转换为可观察对象。它将为数组的每个元素发出下一个事件。所以我们现在有 Observable<Product>productsObservable .

  • 调用flatMapproductObservable将创建一个 Observable<ProductDetail>对于它发送的每个下一个事件。我们现在有一个 Observable,它将发送与 listProducts 结果中的产品一样多的下一个事件。 .

  • 我们使用 toArray 将这个 observable 转换为只会发出 一个 下一个事件的东西,一个聚合来自 productDetails 的所有结果的数组.

关于swift - 如何从另一个可观察数组中获取详细数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40414719/

相关文章:

macos - Swift _ABSearchComparison 不可转换为 ABSearchComparison

ios - Firebase 登录错误消息未显示

ios - 如何在两个表格 View 单元格之间添加一个按钮

swift - 使用 RxSwift 联网

ios - 使用 RxSwift 注册两个自定义单元格

ios - 未调用 UIAlertView 委托(delegate)函数

ios - 无效的 Swift 支持——文件 libswiftCore.dylib 没有正确的代码签名

ios - RxSwift DisposeBag 和 UITableViewCell

ios - 如何使用 RxSwift 将一种类型的 Observable 数组转换为不同类型的 Observable 数组

ios - 使用 MVVM swift 在 View DidLoad 上进行 Api 调用