Moya 通过定义 API 接口和请求配置,减少了重复的请求代码。你只需定义一次 API,之后就可以重用。
import Moya
enum MyService {
case getUser(id: Int)
case createUser(name: String)
}
extension MyService: TargetType {
var baseURL: URL { return URL(string: "https://api.example.com")! }
var path: String {
switch self {
case .getUser(let id):
return "/user/\(id)"
case .createUser:
return "/user"
}
}
var method: Moya.Method {
switch self {
case .getUser:
return .get
case .createUser:
return .post
}
}
var task: Task {
switch self {
case .getUser:
return .requestPlain
case .createUser(let name):
return .requestParameters(parameters: ["name": name], encoding: JSONEncoding.default)
}
}
var headers: [String: String]? {
return ["Content-type": "application/json"]
}
var validationType: ValidationType {
return .successCodes
}
var sampleData: Data {
return Data()
}
}
2. 简化请求和响应处理
Moya 提供了统一的请求和响应处理机制,减少了手动解码和错误处理的代码。
let provider = MoyaProvider<MyService>()
provider.request(.getUser(id: 1)) { result in
switch result {
case .success(let response):
do {
let user = try JSONDecoder().decode(User.self, from: response.data)
print("User: \(user)")
} catch {
print("Decoding error: \(error)")
}
case .failure(let error):
print("Error: \(error)")
}
}