如何对 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 不支持通过名称动态设置 属性。