Ber*_*can 10 nsurlsession swift
我有以下功能从服务器下载图像;
func getImageFromServerById(imageId: String) -> UIImage? {
let url:String = "https://dummyUrl.com/\(imageId).jpg"
var resultInNSDataformat: NSData!
let task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!) {(data, response, error) in
if (error == nil){
resultInNSDataformat = data
}
}
task.resume()
return UIImage(data: resultInNSDataformat)
}
Run Code Online (Sandbox Code Playgroud)
在返回图像之前,该功能不会等待下载任务完成.因此我的应用程序总是崩溃.有关如何等待下载的任何想法?
Mic*_*lum 19
另一个答案不是您已经拥有的代码的良好替代品.更好的方法是继续使用NSURLSession的数据任务来保持下载操作的异步,并将自己的回调块添加到方法中.您需要了解在从方法返回之前,不会执行下载任务块的内容.只需看看resume()的调用是为了进一步证据.
相反,我推荐这样的东西:
func getImageFromServerById(imageId: String, completion: ((image: UIImage?) -> Void)) {
let url:String = "https://dummyUrl.com/\(imageId).jpg"
let task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!) {(data, response, error) in
completion(image: UIImage(data: data))
}
task.resume()
}
Run Code Online (Sandbox Code Playgroud)
哪个可以像这样调用
getImageFromServerById("some string") { image in
dispatch_async(dispatch_get_main_queue()) {
// go to something on the main thread with the image like setting to UIImageView
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9984 次 |
| 最近记录: |