每次迭代数组

时间:2016-02-12 10:55:35

标签: swift networking rx-swift

我使用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)
        }
    }
}

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

请记住我对Swift和RxSwift编程都很陌生,所以请保持温和:)非常感谢任何帮助。

1 个答案:

答案 0 :(得分:9)

您可以使用内置的<。p>代替自定义运算符

<div class="container" ng-repeat="order in orders">
    <h3>{{order.name}}</h3>
</div>