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

问题描述 投票:0回答:2

编译正常,没有问题:

class User: Codable {
    let name: String
    let email: String
}

但是,如果我们有一个用CodingKey表示的属性,它需要一个初始化程序:

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

    private enum CodingKeys: String, CodingKey {
        case name = "username"
    }
}

为什么它决定问题是缺少合成的初始值设定项,而不是发出警告或需要CodingKey的错误?为什么此中断符合“可解码”?

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

ios swift codable
2个回答
0
投票

Xcode将第二个示例引起的错误抛出第一个错误。如果添加了一个初始化程序,它接下来可能会告诉您有关缺少name属性的编码键的一些信息。但是,当您不定义CodingKeys时,它确实能够为您创建CodingKeys和默认的初始化程序。


0
投票

即使您不需要email的CodingKey,您仍然必须声明其大小写,而没有任何值,如:

   private enum CodingKeys: String, CodingKey {
     case name = "username"
     case email
   }
© www.soinside.com 2019 - 2024. All rights reserved.