嘿,我想在 rxswift 中循环,所以我的代码流程首先是使用此代码获取数据 id 列表
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()
}
}
在 ListGame 有 id,在获取列表游戏后,我使用该 id 来获取详细信息 id
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()
}
}
是否可以使用 rxswift 首先获取 ListGame,然后循环获取整个数据详细信息?
您可以使用
flatMap
和 zip
来实现您的目标:
func fetchData() -> Observable<[GameDetailModel]> {
fetchAllGamesWithPagination(0)
.flatMap { list in
Observable.zip(list.map {
self.fetchGameDetails($0.id)
})
}
}