处理一个接口,后台返回的数据是这样的
BaseModel<DataModel>(code: 200, data: false, msg: "用户名不存在"),
定义的模型是这样的,
struct BaseModel<T: Codable>: Codable {
var code: Int
var data: T?
var msg: String
}
然后就解析失败了。
首先应该是后台的问题,没理由返回Bool类型啊。但是今天节假日,所以
修改了模型,添加如下的方法,然后就可以快乐的使用
.map(BaseModel<DataModel>.self)
struct BaseModel<T: Codable>: Codable {
var code: Int
var data: T?
var msg: String
enum CodingKeys: String, CodingKey {
case code
case data
case msg
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
code = try container.decode(Int.self, forKey: .code)
msg = try container.decode(String.self, forKey: .msg)
if let value = try? container.decode(T.self, forKey: .data) {
data = value
} else {
data = nil
}
}
}