【发布时间】:2020-09-07 08:28:13
【问题描述】:
我已经了解如何为服务响应结构制作可编码的包装类。 但有时在服务器端属性值会发生变化,它可能是 Int 或 String。
例子
struct ResponseDataModel : Codable{
let data : DataClass?
enum CodingKey: String, CodingKey{
case data = "data"
}
init(from decoder: Decoder) throw {
let values = try decoder.container(keyedBy: CodingKeys.self)
data = try values.decodeIfPresent(DataClass.self, forKey:.data)
}
}
struct DataClass : Codable{
let id : Int
let name : String?
let age : Int?
enum CodingKey: String, CodingKey{
case id = "id"
case name = "name"
case age = "age"
}
init(from decoder: Decoder) throw {
let values = try decoder.container(keyedBy: CodingKeys.self)
id = try values.decodeIfPresent(Int.self, forKey:.it)
name = try values.decodeIfPresent(String.self, forKey:.name)
age = try values.decodeIfPresent(Int.self, forKey:.age)
}
}
如果 id int string 不管它应该使用 id 值数据绑定到我的控制器,我想使用通用方式。
let id : <T>
如何以通用格式编写可编码。
【问题讨论】:
-
这能回答你的问题吗? What Is Preventing My Conversion From String to Int When Decoding Using Swift 4’s Codable? 使用此逻辑,您无需事先知道它是 Int 还是 String,您需要使用通用解决方案进行处理