Загрузка нескольких параллельных изображений 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 изображения. Как я могу загрузить несколько изображений одновременно и запустить обратный вызов после того, как все они будут завершены?


person mTuran    schedule 03.12.2016    source источник


Ответы (1)


Для каждого URL-адреса вы можете вызвать downloadImage, это начнет загрузку всех изображений одновременно, когда каждое изображение будет извлечено, вы можете добавить его в массив изображений, вы знаете, что все изображения завершили загрузку, когда размер массива изображений такой же, как размер массива URL-адресов, а затем вы можете вызвать свой 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()
        }
    }
})
person juanjo    schedule 03.12.2016
comment
Мне нужно запустить обратный вызов после завершения всех задач, спасибо. - person mTuran; 04.12.2016
comment
Ты прав Герт; обратный вызов вызывается, когда массив изображений имеет тот же размер, что и массив URL-адресов mTuran, что означает, что все изображения закончили загрузку, если нет ошибки, конечно, в этом случае это замыкание с именем callback, но это может быть функция. - person juanjo; 04.12.2016
comment
Я использую Kingfisher и ищу способ узнать, когда цикл завершится. А если ошибка!? - person Frade; 08.05.2020
comment
У вас есть ошибка, доступная в закрытии, так же, как вы добавляете изображение в массив, вы можете добавить ошибку в массив или иметь ссылку на последнюю ошибку. - person juanjo; 08.05.2020