为什么从url下载图像返回nil?

时间:2018-08-27 02:21:09

标签: swift firebase uiimage

我正在尝试下载上载到数据库存储中的图像,并且该图像的链接在我的实时数据库中。链接没有问题,但是当我使用我的方法从链接返回图像时,我得到的结果是零。我强制包装它,因为它现在需要返回图像。

这是我的代码:

System.out.println

请让我知道为什么我的代码失败。

1 个答案:

答案 0 :(得分:0)

您的代码存在的问题是dataTask方法是异步的。您将在下载过程完成之前返回结果。您需要在方法中添加完成处理程序,以在完成后返回图像或错误:


import UIKit
import PlaygroundSupport

PlaygroundPage.current.needsIndefiniteExecution = true

func getImage(from url: URL, completion: @escaping (UIImage?, Error?) -> ()) {
    print("download started:", url.absoluteString)
    URLSession.shared.dataTask(with: url) { data, reponse, error in
        guard let data = data else {
            completion(nil, error)
            return
        }
        print("download finished:")
        completion(UIImage(data: data), nil)
    }.resume()
}

let url = URL(string: "https://i.stack.imgur.com/varL9.jpg")!
getImage(from: url) { image, error in
    guard let image = image else {
        print("error:", error ?? "")
        return
    }
    print("image size:", image.size)
    // use your image here and don't forget to always update the UI from the main thread
    DispatchQueue.main.async {
        self.imageView.image = image
    }
}