原创Blog,转载请注明出处
blog.csdn.net/hello_hwc
前言:这是今天在StackOverflow上给阿三回答的一个问题,在这里写成博客,方便遇到同样问题的人
原理:
- 用DataTask获取Response,并且将DataTask转变成DownloadTask - 对应代理函数
didReceiveResponse
- 在转变成downloadTask后,开始downloadTask-对应代理函数
didBecomeDownloadTask
- 在download完成后,保存文件-对应代理函数
didFinishDownloadingToURL
注意:
- Demo没有进行错误处理
- Demo没有写断点续传的部分
这些在我之前网络开发的部分讲的很清楚,不懂的可以找一下我之前的博客
或者到我的iOS SDK详解专栏里找一下
http://blog.csdn.net/column/manage.html?alias=huangwenchen-ios-sdk
完整代码
建立一个single view的swift工程,拷贝如下代码,就能看到效果了。
import UIKit
class ViewController: UIViewController,NSURLSessionDelegate,NSURLSessionDataDelegate,NSURLSessionDownloadDelegate{
var session:NSURLSession@H_301_46@?
var dataTask:NSURLSessionDataTask@H_301_46@?
let url @H_301_46@= NSURL(string:"http://www.zastavki.com/pictures/originals/2013/Photoshop_Image_of_the_horse_053857_.jpg")@H_301_46@!
var infoDic @H_301_46@= NSMutableDictionary()
override func viewDidLoad() {
super.viewDidLoad()
let configuration @H_301_46@= NSURLSessionConfiguration.defaultSessionConfiguration()
let manqueue @H_301_46@= NSOperationQueue.mainQueue()
session @H_301_46@= NSURLSession(configuration: configuration,delegate:self,delegateQueue: manqueue)
dataTask @H_301_46@= session@H_301_46@?.dataTaskWithRequest(NSURLRequest(URL: url))
dataTask@H_301_46@?.resume()
}
func URLSession(session: NSURLSession,dataTask: NSURLSessionDataTask,didReceiveResponse response: NSURLResponse,completionHandler: (NSURLSessionResponseDisposition) @H_301_46@-> Void) {
NSLog("%@",response.description)
completionHandler(NSURLSessionResponseDisposition.BecomeDownload)
}
func URLSession(session: NSURLSession,didBecomeDownloadTask downloadTask: NSURLSessionDownloadTask) {
downloadTask.resume()
}
func URLSession(session: NSURLSession,downloadTask: NSURLSessionDownloadTask,didFinishDownloadingToURL location: NSURL) {
NSLog("%@",location);
//Get response
NSLog("%@",downloadTask.response@H_301_46@!.description)
}
}