没有减少boilerplate
1. 定义 API 请求
import Alamofire
func getUser(id: Int, completion: @escaping (Result<User, Error>) -> Void) {
let url = "https://api.example.com/user/\(id)"
AF.request(url).responseJSON { response in
switch response.result {
case .success(let value):
do {
let data = try JSONSerialization.data(withJSONObject: value)
let user = try JSONDecoder().decode(User.self, from: data)
completion(.success(user))
} catch {
completion(.failure(error))
}
case .failure(let error):
completion(.failure(error))
}
}
}
func createUser(name: String, completion: @escaping (Result<User, Error>) -> Void) {
let url = "https://api.example.com/user"
let parameters: [String: Any] = ["name": name]
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in
switch response.result {
case .success(let value):
do {
let data = try JSONSerialization.data(withJSONObject: value)
let user = try JSONDecoder().decode(User.self, from: data)
completion(.success(user))
} catch {
completion(.failure(error))
}
case .failure(let error):
completion(.failure(error))
}
}
}2. 错误处理
总结
Last updated