Отслеживайте ход выполнения более чем одной задачи с данными одновременно в Swift

Я загружаю пару изображений и хочу показать пользователю какой-то прогресс, пока он не закончится. Я нашел способ отслеживать ход выполнения задач с данными из этого вопроса но он отслеживает ход загрузки только одной задачи. Я хотел бы получить ход выполнения всех задач вместе с момента запуска первой до завершения загрузки последней.

Отслеживание загрузки с этим наблюдением я нашел по предоставленной ссылке.

private var observation: NSKeyValueObservation?

deinit {
   observation?.invalidate()
}

загрузить все изображения из массива ссылок

for Url in URLArray{
     dispatchImages.enter()
     getImage(withURL: URL(string: Url)!){ image in
           dispatchImages.leave(
     }
}

проверьте, было ли изображение уже кэшировано ранее

// MARK: getImage
func getImage(withURL url:URL, completion: @escaping (_ image:UIImage?)->()) {
    if let cachedVersion = cache.object(forKey: url.absoluteString as NSString) {
        print("image was cached before")
        completion(cachedVersion.image)
    } else {
        downloadImage(withURL: url, completion: completion)
    }
}

скачать образ с заданием данных

// MARK: downloadImage
func downloadImage(withURL url:URL, completion: @escaping (_ image:UIImage?)->()) {
     let dataTask = URLSession.shared.dataTask(with: url) { data, responseURL, error in
         var downloadedImage:UIImage?
            
         if let error = error{
             print(error)
         }
            
         if let data = data {
             downloadedImage = UIImage(data: data)
         }
         // when url contains an image
         if downloadedImage != nil {
         print("image was downloaded")
         // cache the image
         let cacheImage = ImageCache()
         cacheImage.image = downloadedImage
         self.cache.setObject(cacheImage, forKey: url.absoluteString as NSString)
        }
        DispatchQueue.main.async {
           completion(downloadedImage)
        }
    }
    observation = dataTask.progress.observe(\.fractionCompleted) { progress, _ in
    print("progress: ", progress.fractionCompleted)
    }
    dataTask.resume()
}

person JPJerry5    schedule 04.09.2020    source источник
comment
ты решил это? . У меня такая же проблема   -  person Sam    schedule 08.05.2021