Swift 可编码&;自定义Getter生成错误

Swift 可编码&;自定义Getter生成错误,swift,swift4,codable,Swift,Swift4,Codable,我正在使用Codable协议执行我的第一步,并且在尝试将我的结构与自定义getter混合时出现构建错误。我将如何解决这个问题。我必须编写自定义解码和编码功能吗 struct MyStruct: Codable { var variable: String? { get { return variable?.lowercased() } } private enum CodingKeys: String, CodingKey { case variable = "va

我正在使用Codable协议执行我的第一步,并且在尝试将我的结构与自定义getter混合时出现构建错误。我将如何解决这个问题。我必须编写自定义解码和编码功能吗

struct MyStruct: Codable {
  var variable: String? {
    get { return variable?.lowercased() }
  }

  private enum CodingKeys: String, CodingKey {
    case variable = "variable1"
  }
}

更新:解决方案

我发现了一种解决方法,它不是最优的,但它确实起到了作用,它引入了一个保存“真实”数据的私有变量:

struct MyStruct: Codable {
  private var _variable: String?
  var variable: String? {
    get { return _variable?.lowercased() }
  }

  private enum CodingKeys: String, CodingKey {
    case _variable = "variable1"
  }
}

需要使用此“变通方法”的原因是,计算属性不用于存储数据。根据文档,它们“…实际上并不存储值。相反,它们提供了一个getter和一个可选setter来间接检索和设置其他属性和值。”

计算属性不用于存储值。但您可以使用存储的属性,然后在设置时使用
didSet
对其进行修改。这还具有效率方面的额外优势,因为在设置它时,您只需将其小写一次,而不是每次访问它时

struct MyStruct: Codable {
  var variable: String? {
    didSet {
      variable = variable?.lowercased()
    }
  }
}

非常感谢您的澄清!:)很乐意帮忙