一、介绍Alamofire
熟悉OC的同学们都知道AFNetworking。但是那是OC代码写的。今天介绍Alamofire是AFNetworking作者用Swift语言为我们写的一个第三方网络访问框架。即Alamofire就是Swift版的AFNetworking。今天就为同学们介绍一下Alamofire进行断点下载。
二、导入Alamofire。
用cocoapods导入是最方便的。由于Swift语言在不断的升级。我采用的是xcode7.3.1进行的编程,而Alamofire采用的是3.0
三、进入正式编码
在storyboard中,拖出两个button,分别是暂停下载和继续下载。在拖一个进度条,方便显示进度。如图:

将两个button拖成方法,分别命名为stopDownLoad和continueDownLoad。进度条拖成属性,命名为progress。

创建三个属性。分别为下载请求(downloadRequest),下载路径(destination),保存已经下载的数据(cancelledData)。下载路径是为了制定我们下载的文件在哪个路径下。保存已经下载的数据,是为了下次可以接着这次的下载。

在viewDidLoad中,现在开始进行下载,下载是利用Alamofire.download函数进行下载,有三个参数,分别为,请求方式、请求URL、下载的路径。

同时还可以进行进度的检测,利用progress函数。有三个参数,分别是本次下载的大小。目前为止一共下载的大小。一共需要下载的大小。然后通过totalBytesRead / totalBytesExpectedRead就可以得到下载的进度了,值是0~1之间。然后给进度条赋值

还可以得到下载的结果。这里我们又定义了一个downloadResponse函数,当成response函数的参数。

downloadResponse函数如下

downloadResponse函数有四个参数。分别是,request: NSURLRequest?, response: NSHTTPURLResponse?, data: NSData?,error: NSError?。没有返回值。利用可选绑定,如果有错误,并且错误是NSURLErrorCancelled。记录一下已经下载的数据,为了进行下一次的下载。如果不是这个这个错误,那就说明,下载失败了。如果没有错误,就说明,下载成功,并且完成。
最后我们看一下两个按钮的点击方法。
暂停下载方法

在这里我们用了cancel()函数使得下载取消。这样的话,也就说明,如果点击了暂停下载,那么下载就出现了错误,并且错误为NSURLErrorCancelled。这也就是为什么上面那个downloadResponse函数的错误信息要写NSURLErrorCancelled了。
最后,继续下载的方法

利用func download(resumeData data: NSData, destination: Request.DownloadFileDestination) -> Request函数,进行继续下载。参数resumeData填写属性保存已经下载的部分就可以了。这样就可以进行断点下载了。
参考代码下载链接 http://pan.baidu.com/s/1bAlZjS
如果问题,请加QQ2912653129,备注写解决问题,和我单独沟通哦。
网友评论