RxSwift for-loop

时间:2017-08-24 20:15:16

标签: ios swift for-loop subscription rx-swift

我需要在for循环中多次执行任务。任务本身返回Observable<Void>。我觉得通过不断订阅可能会遇到一些意想不到的错误。 可以在for-loop中订阅n次吗?

private func removeItem(from locations: Resource...) {
    for resource in locations {
        RemoveItemTask(id: item.value.id, resource: resource)
            .execute(in: self.dispatcher)
            .subscribe { event in
                if let error = event.error {
                    self.error = Observable.of(error)
                }
            }.addDisposableTo(self.disposeBag)
    }
}

1 个答案:

答案 0 :(得分:0)

为什么要使用for-loop? RxSwift有许多有趣的解决方案供您使用。

所以你有一些任务,你可以map将它们放入一个可观察的数组中,而不需要调用subscribe

let observables: [Observable<Void>] = locations.map({ ... })

然后处理所有错误:

Observable
    .merge(observables.map({ $0.materialize() }))
    .flatMap({ Observable.from(optional: $0.error) })
    .subscribe(onNext: { (error) in
        // Handle error
    })
    .disposed(by: disposeBag)