如何处理NSData并返回UIImage(Swift)
问题描述:
我试图从后端数据库的URL中检索图像&将其转换为图像,并用UIImageView返回函数。如何在这段代码中处理一个NSError,并返回UIImageView?如何处理NSData并返回UIImage(Swift)
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!)
}
答
根据评论更新了我的回答。
您可以返回一个图像占位符,如果你正在寻找一个不可用:
所以你的方法如下所示:
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())
}
答
您可以从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()
}
如果两个backendless来电或NSData的(contentsOfURL)调用走出去到互联网,然后他们不应该是同步的。您应该编写自己的方法,将图像作为参数进行完成关闭。 –