要求的使用环境:
iOS 10.0+ / macOS 10.12+ / tvOS 10.0+ / watchOS 3.0+
Xcode 10.2+
Swift 5+
Alamofire 源码GitHub下载地址:https://github.com/Alamofire/Alamofire
安装方法:CocoaPods
platform :ios, '10.0'
use_frameworks!
target '项目名称' do
pod 'Alamofire', '~> 5.0.0-beta.5'
end
使用:
发请求
Alamofire.request("http://baidu.com/")
Alamofire默认情况下包含五种不同的响应handler:
// 响应 Handler - 未序列化的响应
func response(
queue: DispatchQueue?,
completionHandler: @escaping (DefaultDataResponse) -> Void)
-> Self
// 响应数据 Handler - 序列化成数据类型
func responseData(
queue: DispatchQueue?,
completionHandler: @escaping (DataResponse<Data>) -> Void)
-> Self
// 响应字符串 Handler - 序列化成字符串类型
func responseString(
queue: DispatchQueue?,
encoding: String.Encoding?,
completionHandler: @escaping (DataResponse<String>) -> Void)
-> Self
// 响应 JSON Handler - 序列化成Any类型
func responseJSON(
queue: DispatchQueue?,
completionHandler: @escaping (DataResponse<Any>) -> Void)
-> Self
// 响应 PropertyList (plist) Handler - 序列化成Any类型
func responsePropertyList(
queue: DispatchQueue?,
completionHandler: @escaping (DataResponse<Any>) -> Void))
-> Self
所有的响应handler都不会对响应进行验证。也就是说响应状态码在400..<500和500..<600范围内,都不会触发错误。
响应数据 Handler
responseData handler使用responseDataSerializer(这个对象把服务器的数据序列化成其他类型)来提取服务器返回的数据。如果没有返回错误并且有数据返回,那么响应Result将会是.success,value是Data类型。
Alamofire.request("https://httpbin.org/get").responseData { response in
debugPrint("All Response Info: \(response)")
if let data = response.result.value, let utf8Text = String(data: data, encoding: .utf8) {
print("Data: \(utf8Text)")
}
}
响应字符串 Handler
responseString handler使用responseStringSerializer对象根据指定的编码格式把服务器返回的数据转换成String。如果没有返回错误并且服务器的数据成功地转换为String,那么响应Result将会是.success,value是String类型。
Alamofire.request("https://httpbin.org/get").responseString { response in
print("Success: \(response.result.isSuccess)")
print("Response String: \(response.result.value)")
}
如果没有指定编码格式,将会使用服务器的HTTPURLResponse指定的格式。如果服务器无法确定编码格式,那么默认使用.isoLatin1。
响应 JSON Handler
responseJSON handler使用responseJSONSerializer根据指定的JSONSerialization.ReadingOptions把服务器返回的数据转换成Any类型。如果没有返回错误并且服务器的数据成功地转换为JSON对象,那么响应Result将会是.success,value是Any类型。
Alamofire.request("https://httpbin.org/get").responseJSON { response in
debugPrint(response)
if let json = response.result.value {
print("JSON: \(json)")
}
}
所有JSON的序列化,都是使用JSONSerialization完成的。
HTTP方法
HTTPMethod列举了下面的这些方法:
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"
}
网络请求:
let para = ["name":"zhagnshan"]
let header = ["Accept": "*/*", "X-Requested-With": "APP"]
// encoding:
// URLEncoding //和URL相关的编码
// JSONEncoding //把参数字典编码成JSONData后赋值给request的httpBody
// PropertyListEncoding //把参数字典编码成PlistData后赋值给request的httpBody
request("https://www.baidu.com", method: HTTPMethod.get, parameters: para, encoding: JSONEncoding, headers: header).responseJSON { (response) in
print(response)
if response.result.isSuccess{
//请求成功
}else{
//请求失败
}
}