没有减少boilerplate
如果没有使用 Moya,上述代码需要更多的手动配置和重复代码。以下是没有 Moya 的版本,展示了如何手动处理请求和响应:
1. 定义 API 请求
你需要手动编写请求的 URL 和参数。
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. 错误处理
错误处理也需要重复代码,且每次都需要手动处理响应结果。
provider.request(.getUser(id: 1)) { result in
switch result {
case .success(let response):
// 处理逻辑...
case .failure(let error):
// 处理逻辑...
}
}
总结
没有 Moya,你将不得不重复许多配置和响应处理的代码,导致代码可读性降低和维护成本增加。Moya 的引入使得网络请求更具结构化和模块化,从而减少了这些重复的 boilerplate 代码。
Last updated