Xcode报错:Enum case cannot have a raw value if the enum does not have a raw type
Xcode报错:Enum case cannot have a raw value if the enum does not have a raw type

Xcode报错:Enum case cannot have a raw value if the enum does not have a raw type

在编写《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"
}

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注