Codable & Custom Getter 构建错误
Codable & Custom Getter Build Errors
我正在使用 Codable 协议执行我的第一步,并在尝试将我的结构与自定义 getter 混合时遇到构建错误。我将如何解决这个问题。我是否必须编写自定义解码和编码函数?
struct MyStruct: Codable {
var variable: String? {
get { return variable?.lowercased() }
}
private enum CodingKeys: String, CodingKey {
case variable = "variable1"
}
}
更新:解决方法
我找到了一个解决方法,它不是最佳的,但它通过引入一个保存 'real' 数据的私有变量来完成工作:
struct MyStruct: Codable {
private var _variable: String?
var variable: String? {
get { return _variable?.lowercased() }
}
private enum CodingKeys: String, CodingKey {
case _variable = "variable1"
}
}
您需要使用这个 "workaround" 的原因是因为计算属性并不意味着存储数据。根据文档,它们“......实际上并不存储值。相反,它们提供了一个 getter 和一个可选的 setter 来间接检索和设置其他属性和值。” - The Swift Programming Language
计算属性不用于存储值。但是你可以做的是使用存储的属性,然后在设置时使用didSet
修改它。这具有效率的附加优势,因为您只需在设置时将其小写一次,而不是每次访问它时。
struct MyStruct: Codable {
var variable: String? {
didSet {
variable = variable?.lowercased()
}
}
}
我正在使用 Codable 协议执行我的第一步,并在尝试将我的结构与自定义 getter 混合时遇到构建错误。我将如何解决这个问题。我是否必须编写自定义解码和编码函数?
struct MyStruct: Codable {
var variable: String? {
get { return variable?.lowercased() }
}
private enum CodingKeys: String, CodingKey {
case variable = "variable1"
}
}
更新:解决方法
我找到了一个解决方法,它不是最佳的,但它通过引入一个保存 'real' 数据的私有变量来完成工作:
struct MyStruct: Codable {
private var _variable: String?
var variable: String? {
get { return _variable?.lowercased() }
}
private enum CodingKeys: String, CodingKey {
case _variable = "variable1"
}
}
您需要使用这个 "workaround" 的原因是因为计算属性并不意味着存储数据。根据文档,它们“......实际上并不存储值。相反,它们提供了一个 getter 和一个可选的 setter 来间接检索和设置其他属性和值。” - The Swift Programming Language
计算属性不用于存储值。但是你可以做的是使用存储的属性,然后在设置时使用didSet
修改它。这具有效率的附加优势,因为您只需在设置时将其小写一次,而不是每次访问它时。
struct MyStruct: Codable {
var variable: String? {
didSet {
variable = variable?.lowercased()
}
}
}