http://blog.csdn.net/hbblzjy/article/details/53392135
1、什么是Alamofire
(1) Alamofire的前身是 AFNetworking。 AFNetworking是 iOS和 OS X上很受欢迎的第三方http网络基础库。(2)其实 AFNetwork的前缀 AF便是 Alamofire的缩写。
(3) Swift发布后, AFNetworking的作者又用 Swift语言写了个相同功能的库,这便是 Alamofire。
(4) Alamofire本质是基于` NSURLSession`,并做了封装。使用 Alamofire可以让我们网络请求相关代码(如获取数据,提交数据,上传文件,下载文件等)更加简洁易用。 关于cookie:
Alamofire是基于NSURLRequest封装的,所以cookie会自动保存,就和浏览器请求是一个效果。而且网站Set_cookie多久,本地的cookie就多久,每次请求的时候都会自动带上cookie,直到过期。(所以像登陆session这些的都不用我们手动去处理)
2、Alamofire的功能特性: (1)链式的请求/响应方法 (2)URL / JsON / pList参数编码 (3)上传类型支持:文件(file)、数据(Data)、流(Stream)以及MultipartFormData (4)支持文件下载,下载支持断点续传 (5)支持使用NSURLCredential进行身份验证 (6)http响应验证 (7)TLS Certificate and Public Key Pinning (8)Progress Closure & nsprogress
3、Alamofire库的简单使用:
首先通过Pods进行Alamofire的下载,需要注意的是使用Pods如果输出以下问题,
需要在Podfile文件中加入下面的代码:
然后在文件中导入import Alamofire就可以使用了
除了默认的 .Get类型外,Alamofire还定义了许多其他的http 请求方方式( http Medthods)可以使用。
1 2 3 4 5 6 7 8 9 10 11 | public enum httpMethod : String { case options = "OPTIONS" case get = "GET" case head = "head" case post = "POST" case put = "PUT" case patch = "PATCH" case delete = "DELETE" case trace = "TRACE" case connect = "CONNECT" } |
方法中包含五个参数:
参数一:URLConvertible表示URL地址
参数二:method表示请求方式(可省略,默认为.GET方式)
参数三:parameters表示请求字典参数(可省略,无参数的请求)
参数四:enCoding表示编码方式(可删除,建议不使用就删除)
参数五:headers表示自定义http的头信息(可删除,建议不使用就删除)
代码如下:
只有URL地址的请求:
let urlStr = "http://www.healthmanage.cn/androID/hrsBabyAction_loadHrsBabyHealth.action?";
let paramsDic:[String:Any] = ["userID":"38567","pagesize":"100","pageIndex":"1"];
Alamofire.request(urlStr,method: .post,parameters: paramsDic)
带有参数的请求:
Alamofire.request(urlStr,parameters: paramsDic)
带有请求方式的请求:
Alamofire.request(urlStr,parameters: paramsDic)
带有编码方式的请求:
Alamofire
.request(
urlStr
,parameters: paramsDic,
enCoding:
JsONEnCoding
.
default
)
带有请求头的请求: let
headers:
httpheaders
= [
"Authorization"
:
"Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
,
"Accept"
:
"application/Json"
]
Alamofire
.request(
urlStr
,
enCoding:
JsONEnCoding
.
default
,headers:httpheaders)
响应处理方法:Alamofire还提供了许多响应处理方法:
response() responseData()
responseString(enCoding: nsstringencoding)
responseJsON(options: NSJsONReadingOptions)
responsePropertyList(options: nspropertyListReadOptions) 直接在上面的请求方式后面调用方法,如:
Alamofire.request(urlStr,parameters: paramsDic) .responseJsON(completionHandler: { (responSEObj) in
switch(responSEObj.result) {
case .success(_):
if let dataDic = responSEObj.result.value as? NSDictionary{
print("输出此时的结果数据..........\(dataDic)");
let itemArr:NSArray = dataDic.object(forKey: "ITEMS") as! NSArray;
self.dataArray = NSMutableArray.init(array: itemArr);
self.mytableVIEw.reloadData();
}
break
case .failure(_):
print(responSEObj.result.error!)
break
}
});
这样基本的一个数据请求和数据返回响应就完成了。
4、断点下载 Alamofire提供了下载的请求方法和下载对象 //进度条 var valueProgress:UIProgressVIEw!; //开始,停止 var bsBtn:UIbutton!; //下载文件的保存路径 var destinationPath:DownloadRequest.DownloadfileDestination!; //用于停止下载时,保存已下载的部分 var cancelledData: Data?; //下载请求对象 var downloadRequest: DownloadRequest!; overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad() // Do any additional setup after loading the vIEw,typically from a nib. self.vIEw.backgroundcolor = UIcolor.white; self.Title = "下载页面"; //设置下载路径。保存到用户文档目录,文件名不变,如果有同名文件则会覆盖 self.destinationPath = { _,response in let documentsPath = fileManager.default.urls(for: .documentDirectory,in: .userDomainMask)[0] let fileURL = documentsPath.appendingPathComponent(response.suggestedfilename!) //完成以后才会输出,记得这里查看地址的时候,要把地址最前面的file//去掉 print("输出此时下载的地址位置。。。。。\(fileURL)"); //两个参数表示如果有同名文件则会覆盖,如果路径中文件夹不存在则会自动创建 return (fileURL,[.removePrevIoUsfile,.createIntermediateDirectorIEs]) } //进度条 self.valueProgress = UIProgressVIEw.init(frame: CGRect.init(x: 50,y: 130,wIDth: SCREEN_W-100,height: 50)); self.valueProgress.progressVIEwStyle = UIProgressVIEwStyle.default; self.valueProgress.backgroundcolor = UIcolor.lightGray; self.vIEw.addSubvIEw(self.valueProgress); //开始,停止按钮 self.bsBtn = UIbutton.init(frame: CGRect.init(x: 50,y: 150,height: 50)); self.bsBtn.setTitle("开始下载",for: UIControlState.normal); self.bsBtn.setTitlecolor(UIcolor.blue,for: UIControlState.normal); self.bsBtn.isSelected = false; self.bsBtn.addTarget(self,action: #selector(bsBtnClick(btn:)),for: UIControlEvents.touchUpInsIDe); self.vIEw.addSubvIEw(self.bsBtn); } func bsBtnClick(btn:UIbutton) { if btn.isSelected { btn.setTitle("开始下载",for: UIControlState.normal); btn.isSelected = false; //停止下载,记录下载进度 self.downloadRequest.cancel(); }else{ btn.setTitle("停止下载",for: UIControlState.normal); btn.isSelected = true; //请求下载 self.httpRequest(); } } //MARK:-------------- 下载数据请求http func httpRequest() { if let cancelledData = self.cancelledData { self.downloadRequest = Alamofire.download(resumingWith: cancelledData,to: self.destinationPath); }else{ //页面加载完毕就自动开始下载 self.downloadRequest = Alamofire.download( "http://dldir1.qq.com/qqfile/qq/QQ7.9/16621/QQ7.9.exe",to: self.destinationPath); //print("111111111111"); } //下载进度 self.downloadRequest.downloadProgress(queue: dispatchQueue.main,closure: downloadProgress); //下载数据响应 self.downloadRequest.responseData(completionHandler: downloadResponse); } //MARK:------------下载过程中改变进度条 func downloadProgress(progress: Progress) { //进度条更新 self.valueProgress.setProgress(float(progress.fractionCompleted),animated: true); //print(float(progress.fractionCompleted)); print("当前进度:\(progress.fractionCompleted*100)%"); } //MARK:------------下载停止响应(不管成功或者失败) func downloadResponse(response: DownloadResponse<Data>) { switch response.result { case .success( _): //self.image = UIImage(data: data) self.bsBtn.setTitle("下载完成",for: UIControlState.normal); print("文件下载完毕: \(response)"); case .failure: //意外终止的话,把已下载的数据储存起来 self.cancelledData = response.resumeData; } } 总结
以上是内存溢出为你收集整理的Swift基础之使用Alamofire库进行网络请求和断点下载全部内容,希望文章能够帮你解决Swift基础之使用Alamofire库进行网络请求和断点下载所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)