所以我有一个可编码(或曾经是)的结构
struct Person {
let name: String //<-- Fine
let age: Int //<-- Fine
let location: String //<-- Fine
let character: Character. //<-- Here comes the error (Type Person does not conform to Decodable)
}
enum Character {
case nice, rude
}
现在我明白了错误。除了枚举之外的每种类型都是 Codable 的,所以在那之前我都很好。现在作为解决这个问题的方法..我很确定这会起作用..
extension Person {
private enum CodingKeys: CodingKey { case name, age, location }
}
但是即使在告诉 Swift 我想要解码的属性之后我仍然会得到这个错误?不解。
最佳答案
由于您从 key 中排除了 character
进行解码,因此您需要为 character
提供一个初始值。毕竟,所有属性都需要在初始化期间初始化为某个值。
最简单的方法是给出nil
的初始值:
let character: Character? = nil
当然,你也可以这样做:
let character: Character = .rude
另请注意,您可以使枚举Codable
,只需为其提供原始值类型即可:
enum Character: Int, Codable {
// now nice will be encoded as 0, and rude will be encoded as 1
case nice, rude
}
关于swift - 添加枚举后失去了对 Codable 的一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68296512/