为什么为某些属性定义 CodingKeys 需要初始化程序?

Gol*_*Joe 8 ios swift codable

编译正常,没有问题:

class User: Codable {
    let name: String
    let email: String
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我们有一个不由 CodingKey 表示的属性,则它需要一个初始值设定项:

class User: Codable { // Class 'User' has no initializers
    let name: String
    let email: String

    private enum CodingKeys: String, CodingKey {
        case name = "username"
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么它认为问题是缺乏合成初始化器,而不是需要 CodingKey 的警告或错误?为什么这违反了 Decodable 的一致性?

编辑:由于有些人似乎很困惑,我不是问如何解决该错误。这是显而易见的。我问的是,当您没有为所需属性指定 CodingKey 时,Codable 协议中会发生什么。

Gab*_*und 0

Xcode 抛出由第二个示例引起的一系列错误中的第一个错误。如果您添加了一个初始值设定项,它接下来可能会告诉您与名称属性缺少编码键相关的信息。但是,当您未定义 CodingKeys 时,它确实能够为您创建 CodingKeys 以及默认初始值设定项。