🚀
[Tips] RxSwiftで、SingleをZipして一気に回したいときのやつ
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