如何处理 NSData 并返回 UIImage (Swift)
Posted
技术标签:
【中文标题】如何处理 NSData 并返回 UIImage (Swift)【英文标题】:How to handle NSData and return UIImage (Swift) 【发布时间】:2016-07-24 20:34:32 【问题描述】:我正在尝试从后端数据库的 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) 调用到互联网,那么它们不应该是同步的。您应该编写您的方法以使用图像作为参数来完成闭包。 【参考方案1】:根据 cmets 更新了我的答案。
如果您要查找的图片不可用,您可以返回占位符图片:
所以你的方法将如下所示:
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?
应用中的行为应该是什么?当图像不可用时是否应该显示占位符?
理想情况下是占位符。
更新了我的答案。【参考方案2】:
您可以使用此代码从 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 定义在哪里?以上是关于如何处理 NSData 并返回 UIImage (Swift)的主要内容,如果未能解决你的问题,请参考以下文章
如何处理可能返回 null 并生成 System.NullReferenceException 的方法