moya结合codable的应用
22 May 2023
Moya结合Codable的应用
首先,需要在请求的模型类中实现 Codable 协议。假设我们有一个名为 DataModel 的模型类,包含 id 和 name 两个属性,可以这样定义:
struct DataModel: Codable {
var id: Int
var name: String
}
接着,在网络请求的文件中,定义请求目标并创建 MoyaProvider 对象:
import Moya
// 定义请求目标
enum RequestTarget {
case getData // 获取数据
}
// 创建 MoyaProvider 对象
let provider = MoyaProvider<RequestTarget>()
然后,在发送网络请求时,使用 .request 方法来发送请求,并在回调中处理返回的数据。由于我们的模型类实现了 Codable 协议,因此可以直接使用 .decode() 方法将返回的 JSON 数据转换为模型对象。
// 发送网络请求
provider.request(.getData) { result in
switch result {
case let .success(response):
do {
// 将返回的 JSON 数据转换为 DataModel 数组
let data = try response.map([DataModel].self)
print(data)
} catch {
print(error.localizedDescription)
}
case let .failure(error):
print(error.localizedDescription)
}
}
上面的代码中,我们使用 .map() 方法将返回的 JSON 数据转换为 [DataModel] 类型的数组,如果返回的是单个模型对象,则使用 .map(DataModel.self)。如果解析失败,则使用 .catch() 方法捕获异常并打印错误信息。
需要注意的是,如果返回的 JSON 数据中包含了一些不在模型类中定义的字段,可以使用 CodingKeys 来进行映射。例如:
struct DataModel: Codable {
var id: Int
var name: String
// 定义 CodingKeys
enum CodingKeys: String, CodingKey {
case id
case name = "user_name" // 将 JSON 中的 "user_name" 映射到模型类的 "name" 属性上
}
}
这样就可以将 JSON 中的 user_name 映射到模型类的 name 属性上了。
