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

问题描述 投票:-1回答:1

我正在使用我在这里下的代码下载一些图像并将其显示在集合视图中。

这里提供代码:

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()
}

而且我在视图中调用downloadImage确实加载了url是url的地方。 (此网址有效,我可以下载图片)。

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

我尝试过的完成处理程序过早调用reloadData()。我想在图像下载完成后调用它吗?因此下载后即可立即显示该图像。

此代码有什么问题?

请帮助!

ios swift xcode completionhandler
1个回答
0
投票

拥有图像后,您将立即致电完成处理程序。因此,在您的代码中:

       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)中的想法不太可能正确运行。] >

© www.soinside.com 2019 - 2024. All rights reserved.