新人开始学习IOS开发,今天看了Alamofire的基本命令,参考了官网,总结一下,官方文档如下。可以用cocapods引入alamofire库:
https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md
- 发送请求:
AF.request("<url>").reponse {
… }
此方法的完整定义:
open func request<Parameters: Encodable>(_ convertible: URLConvertible,
method: HTTPMethod = .get,
parameters: Parameters? = nil,
encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default,
headers: HTTPHeaders? = nil,
interceptor: RequestInterceptor? = nil) -> DataRequest
第一行的例子其实使用的是这个简单的定义:
open func request(_urlRequest: URLRequestConvertible,
interceptor: RequestInterceptor?=nil) ->DataRequest
- 可以使用Modifier来自定义请求
AF.request("https://httpbin.org/get", requestModifier: {
$0.timeoutInterval = 5 }).response(...)
请求就写在闭包表达式里面。
AF.request("https://httpbin.org/get") {
urlRequest in
urlRequest.timeoutInterval=5
urlRequest.allowsConstrainedNetworkAccess=false}
.response(...)
- 往请求里面添加参数
参数必须是Encodable类型,并且满足ParameterEncoder协议。如下例子就是创建一个Login请求的例子:
struct Login: Encodable {
let email: String
let password: String
}
let login = Login(email: "test@test.test", password: "testPassword")
AF.request("https://httpbin.org/post",
method: .post,
parameters: login,
encoder: JSONParameterEncoder.default).response {
response in
debugPrint(response)
}
encoder有两种,一种是JSON格式的JSONParameterEncoder,另一种是URLEncodedFormParameterEncoder。
- 通过URL编码格式发送请求
通过URL发送请求的API参数不同,参数有:(请求路径、请求参数(可选)、请求编译器(.methodDependent/.queryString/.httpBody)),编译器根据请求的Http类型决定。
例如POST请求:
let parameters: [String: [String]] = [
“foo”: [“bar”],
“baz”: [“a”, “b”],
“qux”: [“x”, “y”, “z”]
]
// All three of these calls are equivalent
AF.request("https://httpbin.org/post", method: .post, parameters: parameters)
AF.request("https://httpbin.org/post", method: .post, parameters: parameters, encoder: URLEncodedFormParameterEncoder.default)
AF.request("https://httpbin.org/post", method: .post, parameters: parameters, encoder: URLEncodedFormParameterEncoder(destination: .httpBody))
// HTTP body: “qux[]=x&qux[]=y&qux[]=z&baz[]=a&baz[]=b&foo[]=bar”
- URLEncodedFormEncoder
从Swift4.x开始,对字典采用哈希算法会导致在传入Collection类型的时候内部排序混乱,可以使用URLEncodedFormEncoder来对需要编码的键值对进行排序。
let encoder = URLEncodedFormParameterEncoder(encoder: URLEncodedFormEncoder(alphabetizeKeyValuePairs: false))
Format的传参根据需要进行编码的类型不同而不同,每一个参数对应的方法也不同,具体可以参考官方文档:
https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#manual-authentication
- 通过JSON编码发送请求
通过JSON发送请求似乎就没有URL那么麻烦了。编码器的种类有3种,都是可以根据名字知道意思的。例子如下:
let parameters: [String: [String]] = [
"foo": ["bar"],
"baz": ["a", "b"],
"qux": [