http开源库Alamofire——Swift篇

Home / iOS MrLee 2015-12-7 3443

一,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

QQ截图20151207133234

(4)最后,在需要使用 Alamofire 的地方 import 进来就可以了
import Alamofire

二,使用Alamofire进行数据请求
1,以GET请求为例 (1)不带参数,不带结果处理
Alamofire.request(.GET, "https://httpbin.org/get")

(2)带参数,不带结果处理
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])

(3)带参数,也带结果处理(这里以返回结果为json格式的为例)
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还提供了许多其他类型的响应处理方法:
response()
responseData()
responseString(encoding: NSStringEncoding)
responseJSON(options: NSJSONReadingOptions)
responsePropertyList(options: NSPropertyListReadOptions)

(2)Response Handler
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
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
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
Alamofire.request(.GET, "https://httpbin.org/get")
         .responseJSON { response in
             debugPrint(response)
         }

(6)同样也支持链式的返回结果处理
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)可以使用。
public enum Method: String {
    case OPTIONS, GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, CONNECT
}

4,请求参数(Parameters) (1)使用GET类型请求的时候,参数会自动拼接在url后面
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
// https://httpbin.org/get?foo=bar

(2)使用POST类型请求的时候,参数是放在在HTTP body里传递,url上看不到
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以及自定义格式方式编码参数。
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请求:
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)
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)
         }

 

本文链接:https://www.it72.com/7118.htm

推荐阅读
最新回复 (0)
返回