【问题标题】:Lost my conformance to Codable after adding an enum添加枚举后失去了对 Codable 的一致性
【发布时间】:2021-07-08 06:17:38
【问题描述】:

所以我有一个可编码的结构(或者是)

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 
}

现在我明白了这个错误。除了枚举之外的所有类型都是可编码的,所以在那之前我都很好。现在作为解决这个问题的一种方法..我很确定这会奏效..

extension Person { 
  private enum CodingKeys: CodingKey { case name, age, location } 
 }

但即使在告诉 Swift 我想要解码的属性之后,我仍然会收到此错误?困惑。

【问题讨论】:

  • 你只需要这个enum Character: String, Codable
  • 考虑不要调用您的枚举 Character - 字符串中的单个字母已经有一个名为 Character 的类型。或者你可以将 Character 嵌套在 Person 中,这样你就会拥有 Swift.Character 和 Person.Character

标签: swift swiftui


【解决方案1】:

由于您从要解码的密钥中排除了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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2013-07-18
    • 2017-02-14
    • 2023-03-10
    相关资源
    最近更新 更多