【发布时间】:2026-01-08 02:05:03
【问题描述】:
编译没有问题:
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 的警告或错误?为什么这会违反 Decodable 的一致性?
编辑:由于有些人似乎很困惑,我不是在问如何解决错误。这是显而易见的。当您没有为所需属性指定 CodingKey 时,我在问 Codable 协议中发生了什么。
【问题讨论】:
-
您可以简单地为电子邮件分配一个默认值,这样就不需要电子邮件属性的编码键。
-
你知道问题出在哪里,即使错误信息不是很好。