NSURLSession 基本用法示例
使用NSURLSession来执行网络请求:
let url = urlWithSearchText(searchBar.text!)
let session = NSURLSession.sharedSession()
let dataTask = session.dataTaskWithURL(url, completionHandler: { data, response, error in
if let error = error {
print("Failure! \(error)")
} else {
print("Success! \(response!)")
}
})
dataTask.resume()
url获取访问服务器的路径
session使用sharedSession足够基本使用
dataTask向url发送请求,作为参数的closure是请求结束的返回,包含三个参数
最后,dataTask需要调resume方法来开始执行
所有的一切都是在后台异步执行的。
使用Session来异步下载图片
结合Swift的特性extension可以在对UIImage进行扩展,使得异步下载图片。
下面是类UIImageView+DownloadImage.swift的代码实现:
extension UIImageView {
func loadImageWithURL(url: NSURL) -> NSURLSessionDownloadTask {
let session = NSURLSession.sharedSession()
let downloadTask = session.downloadTaskWithURL(url) {
[weak self] url, response, error in
if error == nil, let url = url, data = NSData(contentsOfURL: url), image = UIImage(data: data) {
dispatch_sync(dispatch_get_main_queue()) {
if let strongSelf = self {
strongSelf.image = image
}
}
}
}
downloadTask.resume()
return downloadTask
}
}
另外这个if语句的写法比较特殊,这里相当于很多if的嵌套,对三个变量都进行了unwrapped的操作:url、NSData(contentsOfURL: url)、UIImage(data: data)
if error == nil, let url = url, data = NSData(contentsOfURL: url), image = UIImage(data: data) {
//Code
}
还省略了let 的书写,当然也可以写成:
if error == nil, let url = url, let data = NSData(contentsOfURL: url), let image = UIImage(data: data) {
//Code
}