2016-11-04 3 views
1

RxSwiftの初心者で、REST APIで2つの異なる操作を連鎖しようとしています。配列の別の観測値から詳細な配列を取得するには

RxSwift Observableを返すためにいくつかのREST APIをラップしました.1つは製品のリストと他の製品の詳細を返します。

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

ここで、製品リストから製品の詳細を取得したいのですが、これをどのようにRx方法で行うことができますか?私は

が起こっている

答えて

6
製品詳細ページの配列に製品コードの1つのリストを変換する方法について
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() 
    } 

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

ような何かをしようとしている。しかし動作していない、と私は非常に混乱ここに:

  • flatMapタイプ[Product] -> Observable<[ProductDetails]>を特化しています。どうやって?読む。

  • Observable.fromは、迅速な配列をとり、それを観察可能なものに変換する。配列の要素ごとに次のイベントが発生します。だからproductsObservableObservable<Product>があります。

  • productObservableにコールすると、送信する次のイベントごとにObservable<ProductDetail>が作成されます。私たちは今、listProductsの結果で彼らの製品と同じくらい多くの次のイベントを送る観測可能性を持っています。

  • 私たちは次のイベント、productDetailsからすべての結果を集約する配列を放出する何かにこの観測可能に変換するtoArrayを使用しています。
+0

ありがたいことに、今やデータを変換することは、リアクティブプログラミングでは私にとって明らかになりました。 –

関連する問題