问题描述
在Swift代码中,将一个Resort类配置上SwiftData后,description属性提示报错:
A stored property cannot be named 'description'

问题原因
报错的原因为:
在 Swift 中,description 是 CustomStringConvertible 协议的一部分,当Resort 类型声明了一个 description 属性时,会和这个协议产生冲突。
CustomStringConvertible 是 Swift 标准库的一部分,它提供了一个默认属性 description,用来为对象生成字符串表示形式。
问题的根源在于:声明的属性 description 与 CustomStringConvertible 协议定义的同名属性冲突了。虽然 @Model 注解不是直接导致问题的原因,但它会让 Swift 对数据模型的要求更加严格,从而放大潜在的问题。
所以当标注@Model时,就会显示该报错。当注释掉@Model时,报错则会消失:

解决方案
重命名 description 属性,避免与协议定义的属性冲突。例如,将 description 更改为 details 或 resortDescription:
var resortDescription: String
因为description属性与解码的JSON文件存在映射关系,所以还可以使用CodingKeys指定属性与 JSON 字段的映射关系。
// 自定义 CodingKeys
enum CodingKeys: String, CodingKey {
case id
case name
case country
case resortDescription = "description" // JSON 的 "description" 字段对应 Swift 的 "resortDescription"
...
}
当使用Resort 结构体时,Swift 将自动解析 description 字段到 resortDescription 属性,无需额外操作。