🚀

[Tips] RxSwiftで、SingleをZipして一気に回したいときのやつ

2022/01/26に公開

CombineとかStructured Concurrencyとかが最近流行りだけど、RxSwiftを使ってるよ!って人向け。

毎回忘れちゃうのでメモがてら公開

例えば下記のようなコードを、複数回一括で回したい時があるはず。

func fetchPriceDetail(of itemId: String) -> Single<PriceDetailApiResult> { } 

そういうときにこうするとうまく回せます

func fetchPriceDetails(of itemIds: [String]) -> Single<[PriceDetail]> {
    return Single.zip(itemIds.compactMap({ return fetchPriceDetail(of: $0) }))
    .map({ apiResponses -> [PriceDetail] in
        return なにかの変換処理
    })
}

Single.zip の中身はCollection型を投げればいいのでmapとかの高階演算子を使ってCollectionを作ってあげればきれいにいけます。

Discussion