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
}