【问题标题】:How to use CodingKeys for enums conforming to Codable Protocol?如何将 CodingKeys 用于符合 Codable 协议的枚举?
【发布时间】:2017-09-03 14:01:58
【问题描述】:

我有一个 EmailVerificationStatus 枚举,其关联类型为 String,符合 Codable 协议:

enum EmailVerificationStatus: String, Codable {
    case unverified
    case verified
}

我正在使用的 Web 服务以大写形式发送这些情况 (UNVERIFIED / VERIFIED)。如何使用CodingKeys 枚举来映射这种差异?以下内容不起作用:

enum CodingKeys: String, CodingKey {
    case unverified = "UNVERIFIED"
    case verified = "VERIFIED"
}

【问题讨论】:

    标签: ios enums swift4 codable


    【解决方案1】:

    好的。那很简单。不需要CodingKeys

    enum EmailVerificationStatus: String, Codable {
        case verified = "VERIFIED"
        case unverified = "UNVERIFIED"
    }
    

    【讨论】:

    • 自从Codables 推出以来,我一直在使用它们,但也遇到了这个问题,我不敢相信我没有想到这一点。我已经在墙上敲了几个小时。
    【解决方案2】:

    我建议您使用 struct 作为 Email... 类型并将枚举 CodingKeys 嵌套在您的结构中。 CodingKeys 允许您将结构变量与源数据案例(来自网络服务)映射。

    struct EmailVerificationStatus: String, Codable {
            var unverified: String
            var verified: String
    
            enum CodingKeys: String, CodingKey {
                case unverified = "UNVERIFIED"
                case verified = "VERIFIED"
            }
        }
    

    【讨论】:

      【解决方案3】:

      这是我通常的做法:

      struct EmailVerificationStatus: String, Codable {
          var unverified: String
          var verified: String
      
          enum CodingKeys: String, CodingKey {
              case unverified = "UNVERIFIED"
              case verified = "VERIFIED"
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 2014-07-23
        • 2018-11-09
        • 2018-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多