RxSwiftでAPIを複数呼ぶよ


Firestoreで参照使ってガッチャンコさせてました。

struct A {
    let id: String
    let name: String
    let bIDs: [String]
}
struct B {
    let id: String
    let name: String
}

func getA() -> Single<A> {...}
func getB(id: String) -> Single<B> {...}

みたいなとき👇のように toArray()を駆使することで比較的シンプルにかけるみたい。

func getBList() -> Single<[B]> {
    return getA().flatMap({ (a: A) -> Single<[B]> in
        Observable.from(a.bIDs)
            .flatMap({ (id: String) -> Single<B> in
                getB(id: id)
            }).toArray()
    })
}

Bの順序を保ちたい場合は concatMapを使えば良さげ。

最初にsubscribeをネストさせていたのはナイショ🤮
最近、RxSwift書き始めたのでもっとこう書くべきってのがあったら指摘ください..!