[英]How to use CodingKeys in sub-class when the super class is also 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.