传媒网站,上海工商查询网,wordpress 导航不可点击,企业为什么要增资Alamofire 是 iOS/macOS 开发中最常用的网络请求库之一#xff0c;基于 Swift 编写#xff0c;封装了 URLSession#xff0c;提供了链式调用、JSON 解析、文件上传/下载等高级功能。以下是 Alamofire 的具体用法和示例#xff0c;涵盖常见场景。 安装 Alamofire 通过 Cocoa…Alamofire 是 iOS/macOS 开发中最常用的网络请求库之一基于 Swift 编写封装了 URLSession提供了链式调用、JSON 解析、文件上传/下载等高级功能。以下是 Alamofire 的具体用法和示例涵盖常见场景。 安装 Alamofire 通过 CocoaPods 安装 在 Podfile 中添加
pod Alamofire, ~ 5.8然后运行 pod install。
通过 Swift Package Manager (SPM) 在 Xcode 的 File Add Packages 中输入
https://github.com/Alamofire/Alamofire.git 基本用法 (1) 发起 GET 请求
import Alamofire AF.request(https://httpbin.org/get).response { response in switch response.result {case .success(let data):print(请求成功: \(String(describing: data)))case .failure(let error):print(请求失败: \(error))}
}(2) 带参数的 GET 请求
let parameters [page: 1, limit: 10]AF.request(https://httpbin.org/get, parameters: parameters).responseJSON { response in switch response.result {case .success(let json):print(JSON 数据: \(json))case .failure(let error):print(请求失败: \(error))}
}(3) 发起 POST 请求
let parameters [username: test, password: 123456]AF.request(https://httpbin.org/post, method: .post, parameters: parameters).responseJSON { response in switch response.result {case .success(let json):print(POST 成功: \(json))case .failure(let error):print(POST 失败: \(error))}
}(4) 使用 Encodable 发送 JSON 如果你的参数是 Encodable 对象如 struct可以这样
struct User: Encodable {let name: String let age: Int
}let user User(name: John, age: 25)AF.request(https://httpbin.org/post, method: .post, parameters: user, encoder: JSONParameterEncoder.default).responseJSON { response in switch response.result {case .success(let json):print(POST 成功: \(json))case .failure(let error):print(POST 失败: \(error))}
}高级用法 (1) 文件上传
let fileURL Bundle.main.url(forResource: test, withExtension: jpg)!AF.upload(fileURL, to: https://httpbin.org/post).uploadProgress { progress in print(上传进度: \(progress.fractionCompleted))
}.responseJSON { response in switch response.result {case .success(let json):print(上传成功: \(json))case .failure(let error):print(上传失败: \(error))}
}(2) 文件下载
let destination: DownloadRequest.Destination { _, _ in let documentsURL FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]let fileURL documentsURL.appendingPathComponent(image.jpg)return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}AF.download(https://httpbin.org/image/jpeg, to: destination).response { response in if let filePath response.fileURL?.path {print(文件已保存到: \(filePath))}
}(3) 请求头 认证
let headers: HTTPHeaders [Authorization: Bearer YOUR_TOKEN,Accept: application/json
]AF.request(https://httpbin.org/headers, headers: headers).responseJSON { response in switch response.result {case .success(let json):print(带 Header 的请求: \(json))case .failure(let error):print(请求失败: \(error))}
}(4) 拦截请求RequestInterceptor 可以统一处理认证、重试等逻辑
struct AuthInterceptor: RequestInterceptor {func adapt(_ urlRequest: URLRequest, for session: Session, completion: escaping (ResultURLRequest, Error) - Void) {var request urlRequest request.setValue(Bearer YOUR_TOKEN, forHTTPHeaderField: Authorization)completion(.success(request))}
}let session Session(interceptor: AuthInterceptor())
session.request(https://httpbin.org/headers).responseJSON { response in // 处理响应
}错误处理 Alamofire 提供了详细的错误信息
AF.request(https://httpbin.org/status/404).validate().response { response in if let error response.error {if let statusCode response.response?.statusCode {print(HTTP 状态码错误: \(statusCode))}print(详细错误: \(error.localizedDescription))}
}结合 CombineiOS 13 Alamofire 支持 Combine可以轻松集成到响应式编程中
import Combine AF.request(https://httpbin.org/get).publishDecodable(type: ResponseModel.self).sink { completion in if case .failure(let error) completion {print(请求失败: \(error))}} receiveValue: { response in print(收到数据: \(response.value))}.store(in: cancellables)总结
功能示例GET 请求AF.request(https://example.com/get)POST 请求AF.request(https://example.com/post, method: .post, parameters: params)文件上传AF.upload(fileURL, to: https://example.com/upload)文件下载AF.download(https://example.com/file, to: destination)请求头headers: HTTPHeaders [Authorization: Bearer token]错误处理response.validate().responseJSON { ... }
Alamofire 让网络请求变得更简单适用于大多数 HTTP 请求场景。建议结合 Codable 解析 JSON 数据提升代码可维护性。