一,Alamofire的说明与配置
1,什么是Alamofire (1)Alamofire 的前身是 AFNetworking。AFNetworking 是 iOS 和 OS X 上很受欢迎的第三方HTTP网络基础库。 (2)其实 AFNetwork 的前缀 AF 便是 Alamofire 的缩写。 (3)Swift发布后,AFNetworking的作者又用Swift语言写了个相同功能的库,这便是 Alamofire。 (4)Alamofire 本质是基于`NSURLSession`,并做了封装。使用 Alamofire 可以让我们网络请求相关代码(如获取数据,提交数据,上传文件,下载文件等)更加简洁易用。
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的安装与配置 (1)从 GitHub 上下载最新的代码:https://github.com/Alamofire/Alamofire (2)将下载下来的源码包中 Alamofire.xcodeproj 拖拽至你的工程中 (3)工程 -> General -> Embedded Binaries项,增加 Alamofire.framework
二,使用Alamofire进行数据请求
1,以GET请求为例 (1)不带参数,不带结果处理
(2)带参数,不带结果处理
(3)带参数,也带结果处理(这里以返回结果为json格式的为例)
2,响应处理(Response Handling) (1)除了上面样例使用的responseJSON(处理json类型的返回结果)外,Alamofire还提供了许多其他类型的响应处理方法:
(2)Response Handler
(3)Response Data Handler
(4)Response String Handler
(5)Response JSON Handler
(6)同样也支持链式的返回结果处理
3,请求类型(HTTP Methods) 除了上面使用的 .Get 类型。Alamofire还定义了许多其他的HTTP 方法(HTTP Medthods)可以使用。
4,请求参数(Parameters) (1)使用GET类型请求的时候,参数会自动拼接在url后面
(2)使用POST类型请求的时候,参数是放在在HTTP body里传递,url上看不到
5,参数编码方式(Parameter Encoding) 除了默认的方式外,Alamofire还支持URL、URLEncodedInURL、JSON、Property List以及自定义格式方式编码参数。
比如我们想要把一个字典类型的数据,使用json格式发起POST请求:
6,支持自定义Http头信息(HTTP Headers)
1,什么是Alamofire (1)Alamofire 的前身是 AFNetworking。AFNetworking 是 iOS 和 OS X 上很受欢迎的第三方HTTP网络基础库。 (2)其实 AFNetwork 的前缀 AF 便是 Alamofire 的缩写。 (3)Swift发布后,AFNetworking的作者又用Swift语言写了个相同功能的库,这便是 Alamofire。 (4)Alamofire 本质是基于`NSURLSession`,并做了封装。使用 Alamofire 可以让我们网络请求相关代码(如获取数据,提交数据,上传文件,下载文件等)更加简洁易用。
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的安装与配置 (1)从 GitHub 上下载最新的代码:https://github.com/Alamofire/Alamofire (2)将下载下来的源码包中 Alamofire.xcodeproj 拖拽至你的工程中 (3)工程 -> General -> Embedded Binaries项,增加 Alamofire.framework
1 | import Alamofire |
二,使用Alamofire进行数据请求
1,以GET请求为例 (1)不带参数,不带结果处理
1 | Alamofire.request(.GET, "https://httpbin.org/get" ) |
(2)带参数,不带结果处理
1 | Alamofire.request(.GET, "https://httpbin.org/get" , parameters: [ "foo" : "bar" ]) |
(3)带参数,也带结果处理(这里以返回结果为json格式的为例)
1 2 3 4 5 6 7 8 9 10 11 | Alamofire.request(.GET, "https://httpbin.org/get" , parameters: [ "foo" : "bar" ]) .responseJSON { response in print(response.request) // original URL request print(response.response) // URL response print(response.data) // server data print(response.result) // result of response serialization if let JSON = response.result.value { print( "JSON: \(JSON)" ) } } |
2,响应处理(Response Handling) (1)除了上面样例使用的responseJSON(处理json类型的返回结果)外,Alamofire还提供了许多其他类型的响应处理方法:
1 2 3 4 5 | response() responseData() responseString(encoding: NSStringEncoding) responseJSON(options: NSJSONReadingOptions) responsePropertyList(options: NSPropertyListReadOptions) |
(2)Response Handler
1 2 3 4 5 6 7 | Alamofire.request(.GET, "https://httpbin.org/get" , parameters: [ "foo" : "bar" ]) .response { request, response, data, error in print(request) print(response) print(data) print(error) } |
(3)Response Data Handler
1 2 3 4 5 6 | Alamofire.request(.GET, "https://httpbin.org/get" , parameters: [ "foo" : "bar" ]) .responseData { response in print(response.request) print(response.response) print(response.result) } |
(4)Response String Handler
1 2 3 4 5 | Alamofire.request(.GET, "https://httpbin.org/get" ) .responseString { response in print( "Success: \(response.result.isSuccess)" ) print( "Response String: \(response.result.value)" ) } |
(5)Response JSON Handler
1 2 3 4 | Alamofire.request(.GET, "https://httpbin.org/get" ) .responseJSON { response in debugPrint(response) } |
(6)同样也支持链式的返回结果处理
1 2 3 4 5 6 7 | Alamofire.request(.GET, "https://httpbin.org/get" ) .responseString { response in print( "Response String: \(response.result.value)" ) } .responseJSON { response in print( "Response JSON: \(response.result.value)" ) } |
3,请求类型(HTTP Methods) 除了上面使用的 .Get 类型。Alamofire还定义了许多其他的HTTP 方法(HTTP Medthods)可以使用。
1 2 3 | public enum Method: String { case OPTIONS, GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, CONNECT } |
4,请求参数(Parameters) (1)使用GET类型请求的时候,参数会自动拼接在url后面
1 2 | Alamofire.request(.GET, "https://httpbin.org/get" , parameters: [ "foo" : "bar" ]) // https://httpbin.org/get?foo=bar |
(2)使用POST类型请求的时候,参数是放在在HTTP body里传递,url上看不到
1 2 3 4 5 6 7 8 9 10 11 12 | let parameters = [ "foo" : "bar" , "baz" : [ "a" , 1], "qux" : [ "x" : 1, "y" : 2, "z" : 3 ] ] Alamofire.request(.POST, "https://httpbin.org/post" , parameters: parameters) // HTTP body: foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3 |
5,参数编码方式(Parameter Encoding) 除了默认的方式外,Alamofire还支持URL、URLEncodedInURL、JSON、Property List以及自定义格式方式编码参数。
1 2 3 4 5 6 7 8 9 10 | enum ParameterEncoding { case URL case URLEncodedInURL case JSON case PropertyList(format: NSPropertyListFormat, options: NSPropertyListWriteOptions) case Custom((URLRequestConvertible, [String: AnyObject]?) -> (NSMutableURLRequest, NSError?)) func encode(request: NSURLRequest, parameters: [String: AnyObject]?) -> (NSURLRequest, NSError?) { ... } } |
比如我们想要把一个字典类型的数据,使用json格式发起POST请求:
1 2 3 4 5 6 7 8 9 | let parameters = [ "foo" : [1,2,3], "bar" : [ "baz" : "qux" ] ] Alamofire.request(.POST, "https://httpbin.org/post" , parameters: parameters, encoding: .JSON) // HTTP body: {"foo": [1, 2, 3], "bar": {"baz": "qux"}} |
6,支持自定义Http头信息(HTTP Headers)
1 2 3 4 5 6 7 8 9 | let headers = [ "Authorization" : "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" , "Content-Type" : "application/x-www-form-urlencoded" ] Alamofire.request(.GET, "https://httpbin.org/get" , headers: headers) .responseJSON { response in debugPrint(response) } |
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2302
- 用户1336
- 访客10975850
每日一句
If you want to achieve greatness, stop asking for permission.
如果你想获得伟大,别再请求许可。
如果你想获得伟大,别再请求许可。
UAC的限制引起WM_DROPFILES无法响应的解决办法
MeasureSpec中三种模式:UNSPECIFIED,AT_MOST,EXACTLY
发几个实用的chrome插件
CentOS下使用 svnsync迁移SVN代码库
仙剑奇侠传3d回合-PC端辅助
【转载】C++实现EXE加载到内存执行
【收藏】OpenCV一些常用库函数
《闲来麻将》搭建教程
文本转语音系统Spark-TTS
wordpress转xiuno附件自动插入工具
Mac OS最简单及(Karabiner)快捷键设置
使用Putty上传文件?
ndk神奇问题之non-numeric second argument to `wordlist' function: '8.7z'
新会员