我想将带有 renamed
和 unavailable
参数的 available
属性应用于 struct
的属性符合 Codable
,如下所示:
struct SampleData: Codable {
@available(*, unavailable, renamed: "newProperty")
let oldProperty: String
let newProperty: String
}
但是当我尝试构建这段代码时,我遇到了这样的编译错误:
note: 'oldProperty' has been explicitly marked unavailable here
如果 struct
不符合 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
}
关于swift - 不能将 @available 与 Codable 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67903489/