hey i wanted to loop in rxswift, so my code flow first is fetching list of data id with this code
func fetchAllGamesWithPagination(_ page: Int) -> Observable<[ListGame]> {
let url = URLBASE + "/games"
let parameters = [
"key": API_KEY,
"page_size": "10",
"page": String(page)
]
return Observable<[ListGame]>.create { observer in
AF.request(url, parameters: parameters)
.responseDecodable(of: GameModel.self) { respons in
switch respons.result {
case .success(let result):
observer.onNext(result.results ?? [])
observer.onCompleted()
case .failure(let err):
observer.onError(err)
}
}
return Disposables.create()
}
}
in ListGame theres id, after getting list game i used that id to get detail id with
func fetchGameDetails(_ id: Int) -> Observable<GameDetailModel> {
let url = URLBASE + "/games/\(id)"
let parameters = [
"key": API_KEY
]
return Observable<GameDetailModel>.create { observer in
AF.request(url, parameters: parameters)
.responseDecodable(of: GameDetailModel.self) { response in
switch response.result {
case .success(let detail):
observer.onNext(detail)
observer.onCompleted()
case .failure(let err):
observer.onError(err)
}
}
return Disposables.create()
}
}
is it possible using rxswift for fetching ListGame first and then looping for getting entire data detail?
You can use flatMap
and zip
to acheive your goal:
func fetchData() -> Observable<[GameDetailModel]> {
fetchAllGamesWithPagination(0)
.flatMap { list in
Observable.zip(list.map {
self.fetchGameDetails($0.id)
})
}
}