swift - 不能将 @available 与 Codable 一起使用

标签 swift codable

我想将带有 renamedunavailable 参数的 available 属性应用于 struct 的属性符合 Codable ,如下所示:

struct SampleData: Codable {
    @available(*, unavailable, renamed: "newProperty")
    let oldProperty: String
    let newProperty: String
}

但是当我尝试构建这段代码时,我遇到了这样的编译错误:

note: 'oldProperty' has been explicitly marked unavailable here

enter image description here

如果 struct 不符合 Codable,它也能正常工作。

enter image description here

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

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

提前致谢。

最佳答案

这是因为合成的 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/

相关文章:

swift - Firestore - Swift 子集合

swift - 如何在一系列问题的标签中显示下一个问题

ios - Codable 对象映射数组元素到字符串

Swift Codable 手动解码可选变量

json - 使用可编码的值,有时是 Int,有时是 String

ios - textFieldShouldEndEditing 故障?

ios - 当应用程序处于后台或终止(终止)状态时,在 iOS 应用程序中执行任务

ios - CoreData + Codable 不保存

json - 如何在 Swift 中将 JSON 解码和编码为通用结构

json - 如何通过 Swift 4 的 Decodable 协议(protocol)使用自定义键?