gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:59:21 24 4
gpt4 key购买 nike

我想将带有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com