如何对 Codable 的所有属性使用 decodeIfPresent?
How to use decodeIfPresent for all properties of a Codable?
如何使 Codable
class 对所有属性使用 decodeIfPresent
而无需在自定义初始化程序中键入所有属性?
一个例子:
class Book: Codable {
var name: String = "Default name"
var pages: Int = 1
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
for key in container.allKeys {
// What to do here to call decodeIfPresent?
}
}
}
本质上,我想自己复制自动创建的初始化器,从而改变它的工作方式。
显然目前这是不可能的 (Swift 4)。这是因为 Swift 不支持通过名称动态设置 属性。
如何使 Codable
class 对所有属性使用 decodeIfPresent
而无需在自定义初始化程序中键入所有属性?
一个例子:
class Book: Codable {
var name: String = "Default name"
var pages: Int = 1
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
for key in container.allKeys {
// What to do here to call decodeIfPresent?
}
}
}
本质上,我想自己复制自动创建的初始化器,从而改变它的工作方式。
显然目前这是不可能的 (Swift 4)。这是因为 Swift 不支持通过名称动态设置 属性。