NSURLSession类支持三种类型的任务:加载数据、下载和上传,即Data Task,DownLoad Task和Upload Task。Session Task是整个NSURLSession架构的核心目标。
Data Task用于加载数据,使用全局的sharedSession()和func dataTaskWithRequest方法创建,示例代码如下:
import UIKit class ViewController: UIViewController { func sessionLoadData() { //创建Session对象 var url:NSURL! = NSURL(string: "http://www.weather.com.cn/adat/sk/101010100.html") //创建请求对象 var request:NSURLRequest = NSURLRequest(URL: url) let session = NSURLSession.sharedSession() var dataTask = session.dataTaskWithRequest(request,completionHandler: { (var data:NSData?,var response:NSURLResponse?,var error:NSError?)-> Void in //返回错误信息 if error != nil { println(error?.code) println(error?.description) } else { var jsonString = NSString(data: data!,encoding: NSUTF8StringEncoding) println(jsonString) } }) as NSURLSessionTask dataTask.resume() } }
第二种DownLoad Task用于完成下载文件的任务
如果不需要获取进度,则使用全局的sharedSession()和func downLoadTaskWithRequest方法。
import UIKit class ViewController: UIViewController { func sessionSimpleDownload() { //创建Session对象 var url:NSURL! = NSURL(string: "http://www.yjz9.com/uploadfile/2014/1126/20141126115435256.jpg") //创建请求对象 var request:NSURLRequest = NSURLRequest(URL: url) let session = NSURLSession.sharedSession() var downloadTask = session.downloadTaskWithRequest(request,completionHandler: {(var location:NSURL?,var error:NSError?) ->Void in //输出下载文件原来的存放目录 println("location: \(location)") //location 位置转换 var locationPath = location?.path //拷贝到我们自己的目录中 let documents:String = NSHomeDirectory() + "/Documents/1.png" //创建文件管理器 var fileManager:NSFileManager = NSFileManager.defaultManager() fileManager.moveItemAtPath(locationPath!,toPath: documents,error: nil) println("location: \(documents)") }) downloadTask.resume() } }
运行程序,然后查看路径;
文件已经被拷贝进去了。
func sessionSimpleUpload() { //创建Session对象 var url:NSURL! = NSURL(string: "http://www.iphonetrain.com/shop/data/") //创建请求对象 var request:NSURLRequest = NSURLRequest(URL: url) let session = NSURLSession.sharedSession() //上传数据流 let documents:String = NSHomeDirectory() + "/Documents/1.png" var imgData = NSData(contentsOfFile: documents) var uploadTask = session.uploadTaskWithRequest(request,fromData: imgData,completionHandler: { (var data:NSData?,var error:NSError? )-> Void in println("上传完毕") }) uploadTask.resume() } }