编译正常,没有问题:
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 协议中会发生什么。
Xcode 抛出由第二个示例引起的一系列错误中的第一个错误。如果您添加了一个初始值设定项,它接下来可能会告诉您与名称属性缺少编码键相关的信息。但是,当您未定义 CodingKeys 时,它确实能够为您创建 CodingKeys 以及默认初始值设定项。
| 归档时间: |
|
| 查看次数: |
740 次 |
| 最近记录: |