如何将编码键用于符合代码协议的枚举



我有一个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"
}

好。那很简单。无需CodingKeys

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

这就是我通常这样做的方式:

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

我建议您将struct用于电子邮件...键入枚举编码键并在结构内嵌套。CodingKeys允许您使用源数据案例(来自WebService)映射结构变量。

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

当您的枚举具有关联的值是将Codable合规性纳入扩展名时,它会有所帮助,然后它不会抱怨您实现codingkeys enum。

类似的东西:

enum EmailVerificationStatus: String {
    case unverified
    case verified(email:String)
}
extension EmailVerificationStatus: Codable {
  enum CodingKeys: String, CodingKey {
    case unverified = "UNVERIFIED"
    case verified = "VERIFIED"
  }
}

最新更新