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 response:NSURLResponse?,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 response:NSURLResponse?,var error:NSError? )-> Void in
println("上传完毕")
})
uploadTask.resume()
}
}