Обработчик завершения для запуска collectionView Перезагрузить после загрузки изображений - Xcode [SWIFT] - PullRequest
0 голосов
/ 31 января 2020

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

func downloadImage (url: URL, completion: () -> Void){
    let session = URLSession(configuration: .default)
    let downloadPicTask = session.dataTask(with: url) { (data, response, error) in
        if let e = error {
            print("Error downloading image \(e)")
        } else {
            if let res = response as? HTTPURLResponse {
            print("Downloaded image with response code \(res.statusCode)")
                if let imageData = data {
                let image = UIImage(data: imageData)
                self.globalImages.append(image!)
                print("what does this say?-->", self.globalImages.count) 
                } else {
                print("Couldn't get image: Image is nil")
            }
        } else {
            print("Couldn't get response code for some reason")
            }
        }
    }
    completion()
    downloadPicTask.resume()
}

И я вызываю загружаемое изображение, потому что загрузил, где URL - это URL. (этот URL работает, и я могу загрузить изображение).

downloadImage(url: url) { () -> () in
           collectionView.ReloadData()
            }

Обработчик завершения, который я пробовал, слишком рано вызывает reloadData (). Я хочу, чтобы он был вызван, когда изображение будет загружено? Таким образом, изображение может отображаться сразу после загрузки. Что не так с этим кодом?

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 31 января 2020

Вы бы вызвали обработчик завершения, как только у вас будет изображение. Итак, в вашем коде:

       if let imageData = data {
            let image = UIImage(data: imageData)
            self.globalImages.append(image!)
            print("what does this say?-->", self.globalImages.count)
            // call the completion handler here

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

...