gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 05:56:41 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com