繁体   English   中英

如何将 CodingKeys 用于符合 Codable 协议的枚举?

[英]How to use CodingKeys for enums conforming to Codable Protocol?

我有一个EmailVerificationStatus枚举,它有一个符合Codable协议的相关String类型:

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

我正在使用的网络服务以大写形式发送这些案例( UNVERIFIED / VERIFIED )。 我怎样才能用CodingKeys枚举来表示map的区别呢? 以下内容不起作用:

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

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

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

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

struct EmailVerificationStatus: String, Codable {
        var unverified: String
        var verified: String

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

这是我通常的做法:

struct EmailVerificationStatus: String, Codable {
    var unverified: String
    var verified: String

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

当您的枚举具有关联值时,另一种可能有用的解决方案是将Codable合规性放入扩展中,然后它不会抱怨您实现了 CodingKeys 枚举。

是这样的:

enum EmailVerificationStatus: String {
    case unverified
    case verified(email:String)
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM