我正在使用 RxSwift 来获取一些网络数据,并且在为数组的每次迭代执行请求时遇到了麻烦。这是我的想法:
- 我有一个 API 端点,它返回一个不包含位置数据的 Objs 数组。然后我将遍历 Objs 数组,并为每个获取带有 Obj id 的位置详细信息。像这样的东西:
(代码简化)
var arrayObj = networkClient.request(getObjsEndpoint)
.fetchObjLocationDetails(withNetworkClient: networkClient)
- fetchObjLocationDetails() 类似于:
(代码简化)
extension ObservableType where E == [Obj]? {
func fetchObjsLocationDetails(withNetworkClient networkClient: NetworkClient) -> Observable<[Obj]?> {
return flatMap { Objs -> Observable<[Obj]?> in
guard let unwrappedObjs = Objs as [Obj]? else { return Observable.just(nil) }
let disposeBag = DisposeBag()
var populatedObjs = [Obj]()
unwrappedObjs.forEach { obj in
let getLocationDetailsEndpoint = WeDriveParkAPI.getLocation(id: String(obj.id))
networkClient.request(getLocationDetailsEndpoint)
.observeOn(MainScheduler.instance)
.subscribe(onNext: { json in
guard let populatedObj = Obj.fromJSON(json) as Obj? else { return }
populatedObjs += [populatedObj]
}, onError:{ e in
}).addDisposableTo(disposeBag)
}
return Observable.just(populatedObjs)
}
}
}
这个解决方案并没有真正起作用,因为代码甚至没有进入 subscribe next 闭包中。
请记住,我对 Swift 和 RxSwift 编程都是新手,所以要温柔:) 任何帮助将不胜感激。