LoginSignup
1
1

More than 3 years have passed since last update.

RxSwiftでAPIを複数呼ぶよ

Posted at

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書き始めたのでもっとこう書くべきってのがあったら指摘ください..!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1