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

How can I get a detailed array from another observable of array

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

我将一些 REST API 包装到 return RxSwift Observable,一个 return 产品列表和其他产品详细信息。

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([=10=].code) }

    return productDetails.toArray()
  }

这是怎么回事:

  • flatMap 具有特殊类型 [Product] -> Observable<[ProductDetails]>。如何?继续阅读。

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

  • 中有 Observable<Product>
  • productObservable 上调用 flatMap 将为它发送的每个下一个事件创建一个 Observable<ProductDetail>。我们现在有一个 observable,它将发送与 listProducts.

  • 结果中的产品一样多的下一个事件
  • 我们使用 toArray 将这个 observable 转换为只会发出 一个 下一个事件的东西,一个集合了 productDetails 的所有结果的数组。 =38=]