Я рекомендую использовать Observable.combineLatest(o1, o2)
вариант combineLatest
(эта форма ограничена 8 аргументами)
Предполагается, что тип, возвращаемый из case getPopByCity(city: String)
, может выглядеть следующим образом:
struct PopByCity: Decodable {
let count: Float
}
вы, вероятно, хотите реализовать запрос следующим образом:
Observable.combineLatest(o1, o2)
.map { (resp1: Response, resp2: Response) -> [PopByCity] in
let pop1 = try? JSONDecoder().decode(PopByCity.self, from: resp1.data)
let pop2 = try? JSONDecoder().decode(PopByCity.self, from: resp2.data)
return [pop1, pop2].compactMap { $0 }
}
.subscribe(onNext: { (result: [PopByCity]) in
print(result)
})
.disposed(by: disposeBag)
Но если вам все еще нужен массив запросов:
Observable.combineLatest([o1, o2])
.map { (responses: [Response]) -> [PopByCity] in
responses.map { try? JSONDecoder().decode(PopByCity.self, from: $0.data) }
.compactMap { $0 }
}
.subscribe(onNext: { (result: [PopByCity]) in
print(result)
})
.disposed(by: disposeBag)
Для второго варианта имейте в виду, что онНе рекомендуется отправлять тонны асинхронных запросов одновременно.Для выполнения многих запросов я рекомендую использовать оператор Concat или комбинацию Concat + Уменьшить , если вам приходится обрабатывать все ответы в одном месте после последнего ответа.