GET 请求
import Alamofire
Alamofire.request("https://example.com/get", method: .get)
.responseJSON { response in
switch response.result {
case .success(let JSON):
print("Success with JSON: \(JSON)")
case .failure(let error):
print("Request failed with error: \(error)")
}
}
POST 请求
Alamofire.request("https://example.com/post", method: .post, parameters: ["foo": "bar"], encoding: JSONEncoding.default)
.responseJSON { response in
// 处理响应
}
URL编码
let parameters: Parameters = ["q": "Alamofire"]
Alamofire.request("https://example.com/search", parameters: parameters)
// 处理响应...
JSON编码
let parameters: Parameters = ["foo": "bar"]
Alamofire.request("https://example.com/post", method: .post, parameters: parameters, encoding: JSONEncoding.default)
// 处理响应...
HTTP头部自定义
let headers: HTTPHeaders = [
"Authorization": "Bearer access_token",
"Accept": "application/json"
]
Alamofire.request("https://example.com/get", headers: headers)
// 处理响应...
上传文件
let fileURL = Bundle.main.url(forResource: "video", withExtension: "mp4")!
Alamofire.upload(fileURL, to: "https://example.com/upload")
.responseJSON { response in
// 处理响应...
}
下载文件
let destination: DownloadRequest.DownloadFileDestination = { _, _ in
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let fileURL = documentsURL.appendingPathComponent("file.pdf")
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}
Alamofire.download("https://example.com/file.pdf", to: destination)
.response { response in
// 检查 response.destinationURL 确认下载位置
// 处理响应...
}
使用Response Handler处理响应
Alamofire.request("https://example.com/get")
.responseJSON { response in
// 使用 JSON 数据...
}
.responseString { response in
// 使用 String 数据...
}
多部分表单上传
Alamofire.upload(
multipartFormData: { multipartFormData in
multipartFormData.append("Hello".data(using: String.Encoding.utf8)!, withName: "greeting")
multipartFormData.append(Data("name".utf8), withName: "who")
},
to: "https://example.com/multipartForm",
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
// 处理上传响应...
}
case .failure(let encodingError):
print(encodingError)
}
}
)
错误处理
Alamofire.request("https://example.com/notfound", method: .get)
.validate()
.responseJSON { response in
switch response.result {
case .success:
// 解析JSON...
case .failure(let error):
// 错误处理...
print(error)
}
}
请求处理
let request = Alamofire.request("https://example.com/data")
.responseJSON { response in
// 处理响应...
}
request.cancel() // 取消请求
监听网络状态
let networkReachabilityManager = NetworkReachabilityManager()
networkReachabilityManager?.startListening { status in
switch status {
case .notReachable:
print("The network is not reachable")
case .unknown :
print("It is unknown whether the network is reachable")
case .reachable(.ethernetOrWiFi):
print("The network is reachable over the WiFi or Ethernet connection")
case .reachable(.wwan):
print("The network is reachable over the WWAN (cellular) connection")
}
}
链式请求与响应处理
Alamofire.request("https://example.com/data")
.validate(statusCode: 200..<300)
.validate(contentType: ["application/json"])
.responseData { response in
switch response.result {
case .success(let data):
// 处理 data
case .failure(let error):
// 处理 error
}
}
自定义请求适配器和重试器
class CustomRequestAdapter: RequestAdapter {
func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
var urlRequest = urlRequest
// 修改请求头部或者查询参数等
urlRequest.setValue("mySecretToken", forHTTPHeaderField: "Authorization")
return urlRequest
}
}
let sessionManager = SessionManager()
sessionManager.adapter = CustomRequestAdapter()
sessionManager.request("https://httpbin.org/get").responseJSON { response in
// 处理响应...
}
在请求失败时自动进行重试
class CustomRetrier: RequestRetrier {
func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) {
// 检查错误代码, 决定是否需要重试
if ... {
completion(true, 1.0) // 重试,延迟1秒
} else {
completion(false, 0.0) // 不重试
}
}
}
let sessionManager = SessionManager()
sessionManager.retrier = CustomRetrier()
sessionManager.request("https://httpbin.org/get").responseJSON { response in
// 处理响应...
}
响应序列化
以下是使用JSON 序列化器作为一个例子:
Alamofire.request("https://httpbin.org/get").responseJSON { response in
if let json = response.result.value {
print("JSON: \(json)")
}
}
SSL Pinning
let serverTrustPolicies: [String: ServerTrustPolicy] = [
"example.com": .pinPublicKeys(
publicKeys: ServerTrustPolicy.publicKeys(),
validateCertificateChain: true,
validateHost: true
)
]
let sessionManager = SessionManager(
serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
)
sessionManager.request("https://example.com/secure").response { response in
// 处理使用SSL Pinning的响应...
}
图片下载和缓存
import AlamofireImage
let imageView = UIImageView()
let url = URL(string: "https://example.com/image.png")!
imageView.af_setImage(withURL: url)