Xcode报错:A stored property cannot be named ‘description’
Xcode报错:A stored property cannot be named ‘description’

Xcode报错:A stored property cannot be named ‘description’

问题描述

在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 属性,无需额外操作。

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

发表回复

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