每次迭代数组的RxSwift请求

前端之家收集整理的这篇文章主要介绍了每次迭代数组的RxSwift请求前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Rx Swift获取一些网络数据,而我在执行每次迭代数组的请求时遇到了麻烦.这是我的想法:

>我有一个API端点,它返回一个不包含位置数据的Objs数组.然后我将循环遍历Objs数组,并为每个获取Obj id的位置详细信息.像这样的东西:

(代码简化)

  1. var arrayObj = networkClient.request(getObjsEndpoint)
  2. .fetchObjLocationDetails(withNetworkClient: networkClient)

>而fetchObjLocationDetails()将类似于:

(代码简化)

  1. extension ObservableType where E == [Obj]? {
  2. func fetchObjsLocationDetails(withNetworkClient networkClient: NetworkClient) -> Observable<[Obj]?> {
  3. return flatMap { Objs -> Observable<[Obj]?> in
  4. guard let unwrappedObjs = Objs as [Obj]? else { return Observable.just(nil) }
  5.  
  6. let disposeBag = DisposeBag()
  7. var populatedObjs = [Obj]()
  8.  
  9. unwrappedObjs.forEach { obj in
  10. let getLocationDetailsEndpoint = WeDriveParkAPI.getLocation(id: String(obj.id))
  11.  
  12. networkClient.request(getLocationDetailsEndpoint)
  13. .observeOn(MainScheduler.instance)
  14. .subscribe(onNext: { json in
  15. guard let populatedObj = Obj.fromJSON(json) as Obj? else { return }
  16.  
  17. populatedObjs += [populatedObj]
  18. },onError:{ e in
  19.  
  20. }).addDisposableTo(disposeBag)
  21. }
  22. return Observable.just(populatedObjs)
  23. }
  24. }
  25. }

这个解决方案并没有真正起作用,因为代码甚至没有进入订阅下一个闭包.

请记住,我是Swift和RxSwift编程的新手,所以要温柔:)任何帮助将不胜感激.

而不是制作自定义运算符,您可以使用内置.
  1. networkClient.request(getObjsEndpoint)
  2. .map({ (objs:[Obj]?) -> [Obj] in
  3. if let objs = objs {
  4. return objs
  5. } else {
  6. throw NSError(domain: "Objs is nil",code: 1,userInfo: nil)
  7. }
  8. })
  9. .flatMap({ (objs:[Obj]) -> Observable<[Obj]> in
  10. return objs.toObservable().flatMap({ (obj:Obj) -> Observable<Obj> in
  11. let getLocationDetailsEndpoint = WeDriveParkAPI.getLocation(id: String(obj.id))
  12. return self.networkClient.request(getLocationDetailsEndpoint)
  13. .map({ (obj:Obj?) -> Obj in
  14. if let obj = obj {
  15. return obj
  16. } else {
  17. throw NSError(domain: "Obj is nil",userInfo: nil)
  18. }
  19. })
  20. }).toArray()
  21. })
  22. .subscribeNext({ (objs:[Obj]) in
  23. print("Populated objects:")
  24. print(objs)
  25. }).addDisposableTo(bag)

猜你在找的Swift相关文章