在编写《SwiftData @Model与Codable协议的实现冲突》一文中,定义CodingKey时发生报错:
enum CodingKeys: CodingKey {
case id = "id"
case name = "name"
}
报错提示:
Enum case cannot have a raw value if the enum does not have a raw type
报错的原因为,在 Swift 中,当定义一个 enum 时,如果要为每个 case 赋予一个原始值(raw value),必须在 enum 声明时指定其原始类型(如 String 或 Int)。CodingKeys 是一个特殊的枚举,用于 Codable 的键映射。无需显式地指定原始值,因为键的名称默认会自动对应枚举的 case 名称。
因为 CodingKeys 没有指定原始类型,却试图为每个 case 指定一个字符串值而报错。
解决方案:
如果键名和 case 名相同,不需要指定原始值:
enum CodingKeys: CodingKey {
case id
case name
}
如果需要映射到不同的键名,则必须指定 String 作为原始类型:
enum CodingKeys: String, CodingKey {
case id = "unique_id"
case name = "full_name"
}