У меня есть приложение, которое загружает несколько изображений на сервер, используя 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: запрос getUploadToken для изображения 1.
- Очередь 2: makeUploadRequest для изображения 1.
- Очередь 3: запрос getUploadToken для изображения 2.
- Очередь 4: makeUploadRequest для изображения 2.
... и т. Д.
Таким образом, только после того, как изображение 1 в цикле for завершит весь свой процесс, изображение 2 может начать свой процесс. С очередями, даже если приложение фоновое, оно должно работать.
Как мне добиться такого поведения с помощью очередей?
Я могу заставить эту работу работать с DispatchGroup()
, но она не работает, когда приложение подключено. Я исследовал и прочитал все в Интернете, но я не мог заставить что-то работать. Поэтому я хочу, чтобы это работало с очередями. Любая помощь будет оценена.