如何处理NSData并返回UIImage (Swift)

3

我正在尝试从后端数据库中检索一张图片的URL并将其转换为图像,然后返回一个UIImageView函数。在这段代码中,我该如何处理NSError错误,并仍然能够返回UIImageView?

func getImage() -> UIView {

    let imageLink = backendless.userService.currentUser.getProperty("Avatar")

    let URL = NSURL(string: imageLink as! String)

    let data = NSData(contentsOfURL: URL!)

    let image: UIImage!

    image = UIImage(data: data!)

    return UIImageView(image: image!)
}

如果后端调用或NSData(contentsOfURL)调用中的任何一个都要访问互联网,那么它们不应该是同步的。你应该编写你的方法以接受一个完成闭包,并将图像作为参数传递进去。 - Duncan C
2个回答

4

根据评论更新了我的答案。

如果您要查找的图片不可用,可以返回占位符图片:

因此,您的方法将如下所示:

func getImage() -> UIImage {

    var imageLink = backendless.userService.currentUser.getProperty("Avatar")

    guard let imageUrl = imageLink as? String,
        let URL = NSURL(string: imageUrl),
        let data = NSData(contentsOfURL: URL)
         else {
            return UIImage(named: "placeholder")
    }

    return UIImage(data: data)
}

这是如何使用它:
func koloda(koloda: KolodaView, viewForCardAtIndex index: UInt) -> UIView {
    return UIImageView(image: getImage())
}

使用imageView的方法如下:func koloda(koloda: KolodaView, viewForCardAtIndex index: UInt) -> UIView { } 它必须返回一个UIImageView,那么我该如何在这种情况下实现if let呢? - Brandon
应用程序中的行为应该是什么?当图像不可用时,它应该显示一个占位符还是什么? - fiks
理想情况下,应该有一个占位符。 - Brandon
更新了我的回答。 - fiks

1
您可以使用以下代码从URL下载图像并作为UIImage返回。希望这有所帮助:
func downloadImage(url: NSURL) -> UIImage {

        getDataFromUrl(url) { (data, response, error)  in
            dispatch_async(dispatch_get_main_queue()) { () -> Void in
                guard let data = data where error == nil else { return }

                let image:UIImage = UIImage(data: data)!

                return image
            }
        }
    }

更新:这是getDataFromUrl函数。
func getDataFromUrl(url:NSURL, completion: ((data: NSData?, response: NSURLResponse?, error: NSError? ) -> Void)) {
        NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) in
            completion(data: data, response: response, error: error)
            }.resume()
    }

getDataFromUrl 在哪里定义的? - Brandon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接