下载图像后触发collectionView重新加载的完成处理程序-Xcode [SWIFT]

Posted

技术标签:

【中文标题】下载图像后触发collectionView重新加载的完成处理程序-Xcode [SWIFT]【英文标题】:Completion Handler to trigger collectionView Reload once Images are downloaded - Xcode [SWIFT] 【发布时间】:2020-01-31 03:32:43 【问题描述】:

我正在使用从这里下载的代码下载一些图像并将它们呈现在集合视图中。 代码如下:

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。 (这个网址有效,我可以下载图片)。

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

我尝试过的完成处理程序调用 reloadData() 太快了。我希望在图像下载完成后调用它?这样图像就可以在下载后立即显示。 这段代码有什么问题?

请帮忙!

【问题讨论】:

【参考方案1】:

您将在获得图像后立即调用完成处理程序。所以,在你的代码中:

       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) 不太可能正常工作。

【讨论】:

它不允许我将完成处理程序放在那里。它有错误Escaping closure captures non-escaping parameter 'completion' ***.com/questions/59784963/…

以上是关于下载图像后触发collectionView重新加载的完成处理程序-Xcode [SWIFT]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重新加载图像的情况下重新加载 collectionview 单元格

如何在 CollectionView iOS 中停止自动重新加载和刷新图像

iOS:用于加载图像的 CollectionView 垂直分页

UICollectionView在滚动时重新加载错误的图像

删除后重新加载collectionView

重新加载collectionview后关闭视图