【发布时间】:2019-04-16 13:46:35
【问题描述】:
我有一个使用 Alamofire 将多个图像上传到服务器的应用程序。每个图像在上传到服务器之前都需要一个上传令牌。因此,在 for 循环中,对于每个图像文件,
我通过 Alamofire 发出获取请求以获取上传令牌
获得令牌后,我通过 Alamofire 使用该令牌发出上传请求。
这是我的代码:
func uploadFile(image: imageToUpload, onCompletion: @escaping ((Bool) -> Void)) {
...//some code
// Alamofire request to get an upload token
getUploadToken() { uploadToken in
if uploadToken != nil {
// Alamofire request to make the upload with uploadToken and image data
makeUploadRequest(token: uploadToken, image: imageToUpload) { uploadResponse in
onCompletion(uploadResponse)
}
}
}
这是我的 for 循环遍历要上传的图像:
DispatchQueue.global(qos: .background).async {
let group = DispatchGroup()
for fileToUpload in filesToUpload {
group.enter()
FileOperations.shared.uploadFile(image: fileToUpload) { hasFinished in
if hasFinished {
group.leave()
}
}
group.wait()
}
}
所以我需要使用队列来实现这一点。我的代码需要像这样工作:
- 队列 1:图像 1 的 getUploadToken 请求。
- 队列 2:图像 1 的 makeUploadRequest。
- 队列 3:图像 2 的 getUploadToken 请求。
- 队列 4:图像 2 的 makeUploadRequest。
...等等。
所以只有在for循环中的image 1完成了它的整个过程之后,image 2才能开始它的进程。使用队列,即使应用程序是后台的,它也应该可以工作。
如何使用队列实现这种行为?
我可以使用DispatchGroup() 进行这项工作,但在应用程序后台运行时它不起作用。我研究并阅读了互联网上的所有内容,但似乎没有任何效果。所以我想用队列来完成这项工作。任何帮助将不胜感激。
【问题讨论】:
标签: ios swift alamofire nsoperationqueue