编译正常,没有问题:
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协议中正在发生什么。
Xcode将第二个示例引起的错误抛出第一个错误。如果添加了一个初始化程序,它接下来可能会告诉您有关缺少name属性的编码键的一些信息。但是,当您不定义CodingKeys时,它确实能够为您创建CodingKeys和默认的初始化程序。
即使您不需要email
的CodingKey,您仍然必须声明其大小写,而没有任何值,如:
private enum CodingKeys: String, CodingKey {
case name = "username"
case email
}