Параллельная загрузка изображений Kingfisher

У меня есть массив с URL-адресами изображений, и мне нужно скачать все изображения, добавить их все в массив, прежде чем перейти к просмотру.

Я использую этот фрагмент для загрузки одного изображения

var images: [UIImage] = []
ImageDownloader.default.downloadImage(with: URL(string: "http://abcd.com/image1.jpg")!, options: [], progressBlock: nil) {
        (image, error, url, data) in
        images.append(image!)
      }

но это только загрузка 1 изображения. Как я могу загрузить несколько изображений одновременно и запустить обратный вызов после того, как все они завершены?

1 ответ

Для каждого URL вы можете позвонить downloadImage при этом начнется загрузка всех изображений одновременно, когда каждое изображение извлекается, вы можете добавить его в массив изображений, вы знаете, что все изображения закончили загрузку, когда размер массива изображений совпадает с размером массива URLs и тогда вы можете позвонить callback

imageURLS.forEach({ 
    ImageDownloader.default.downloadImage(with: $0, options: [], progressBlock: nil) {
       (image, error, url, data) in
        images.append(image!)
        if images.count == imageURLS.count {
            callback()
        }
    }
})
Другие вопросы по тегам