无法将 @available 与 Codable 一起使用

Kaz*_*shi 3 swift codable

我想将available带有renamed和参数的属性应用于符合 的unavailable属性,如下所示:structCodable

struct SampleData: Codable {
    @available(*, unavailable, renamed: "newProperty")
    let oldProperty: String
    let newProperty: String
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试构建此代码时,出现如下编译错误:

注意:“oldProperty”已在此处明确标记为不可用

在此输入图像描述

如果 astruct不符合Codable,则效果很好。

在此输入图像描述

有谁知道如何解决这个问题?

如果无法解决此问题,请告诉我原因,我将不胜感激。

提前致谢。

Swe*_*per 5

这是因为综合Codable一致性也在尝试解码/编码oldProperty。它不能不这样做,因为所有存储的属性都必须初始化,即使它们不可用。

oldProperty如果您初始化为某个值,并添加一个CodingKey枚举来告诉自动合成的一致性仅编码/解码,它将起作用newProperty

struct SampleData: Codable {
    @available(*, unavailable, renamed: "newProperty")
    let oldProperty: String = ""
    let newProperty: String
    
    enum CodingKeys: CodingKey {
        case newProperty
    }
}
Run Code Online (Sandbox Code Playgroud)

实际上,根据情况,您也许能够转换oldProperty为计算属性,在这种情况下您不需要编码键。

struct SampleData: Codable {
    @available(*, unavailable, renamed: "newProperty")
    var oldProperty: String { "" }
    let newProperty: String
}
Run Code Online (Sandbox Code Playgroud)