swift - 不能将 @available 与 Codable 一起使用
问题描述
我想将available
带有renamed
和unavailable
参数的属性应用于struct
符合的属性Codable
,如下所示:
struct SampleData: Codable {
@available(*, unavailable, renamed: "newProperty")
let oldProperty: String
let newProperty: String
}
但是,当我尝试构建此代码时,出现如下编译错误:
注意:“oldProperty”已在此处明确标记为不可用
如果 astruct
不符合Codable
,它工作得很好。
有谁知道如何解决这个问题?
如果无法解决这个问题,如果您能告诉我原因,我将不胜感激。
提前致谢。
解决方案
这是因为合成的Codable
一致性也在尝试解码/编码oldProperty
。它不能不这样做,因为所有存储的属性都必须初始化,即使它们不可用。
如果您初始化oldProperty
为某个值,它会起作用,并添加一个CodingKey
枚举来告诉自动合成的一致性仅编码/解码newProperty
:
struct SampleData: Codable {
@available(*, unavailable, renamed: "newProperty")
let oldProperty: String = ""
let newProperty: String
enum CodingKeys: CodingKey {
case newProperty
}
}
实际上,根据情况,您可能能够转换oldProperty
为计算属性,在这种情况下,您不需要编码键。
struct SampleData: Codable {
@available(*, unavailable, renamed: "newProperty")
var oldProperty: String { "" }
let newProperty: String
}
推荐阅读
- flutter - 在 Flutter 中声明一个 Styles 文件
- typescript - 键入一个类,以便所有方法都匹配枚举
- firebase - 如何允许用户根据实时数据库中的数据编辑 Firebase 存储中的文件?
- javascript - 本地主机无法连接到 IIS 中的 ASP 文件
- c# - 套接字-> 程序导致缺少最后一个字符
- jquery - 如何使用 CSS 为 jQuery 表中的每一行设置不同的图像
- c - 为什么 getchar() 需要不终止我的无限循环?
- objective-c - 从情节提要中的菜单选择将数据传递到表格视图控制器
- python - 将标题作为文件名但不返回
- r - 安装数据表包时,安装包“RcppCCTZ”的退出状态非零