鉴于我的应用程序将从服务器下载文件,而我只希望同时进行 1 次下载,那么如何做到这一点RxAlamofire
呢?我可能只是缺少一个 Rx 运算符。这是粗略的代码:
Observable
.from(paths)
.flatMapWithIndex({ (ip, idx) -> Observable<(Int, Video)> in
let v = self.files![ip.row] as! Video
return Observable.from([(idx, v)])
})
.flatMap { (item) -> Observable<Video> in
let req = URLRequest(url: item.1.downloadURL())
return Api.alamofireManager()
.rx
.download(req, to: { (url, response) -> (destinationURL: URL, options: DownloadRequest.DownloadOptions) in
...
})
.flatMap({ $0.rx.progress() })
.flatMap { (progress) -> Observable<Float> in
// Update a progress bar
...
}
// Only propagate finished items
.filter { $0 >= 1.0 }
// Return the item itself
.flatMap { _ in Observable.from([item.1]) }
}
.subscribe(
onNext: { (res) in
...
},
onError: { (error) in
...
},
onCompleted: {
...
}
)
我的问题是a) RxAlamofire 将同时下载多个项目,并且b)为这些不同的项目多次调用 (progress) 块(每个项目都有不同的进度信息,导致 UI 表现得有点奇怪)。
如何确保下载一个一个而不是同时完成?