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