Параллельная загрузка изображений 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()
}
}
})