Codable&自定义Getter构建错误

时间:2017-08-10 13:26:55

标签: swift swift4 codable

我正在使用Codable协议执行我的第一步,并在尝试将我的结构与自定义getter混合时获得Build Error。我该如何解决这个问题。我是否必须编写自定义解码和编码功能?

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

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

enter image description here

更新:替代方法

我找到了一个解决方法,这不是最佳的,但它可以通过引入一个保存真实'真实'的私有变量来完成工作。数据:

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

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

1 个答案:

答案 0 :(得分:1)

您需要使用此"解决方法"是因为计算属性不是为了存储数据。根据文档,他们," ...实际上不存储值。相反,它们提供了一个getter和一个可选的setter来间接检索和设置其他属性和值。" - The Swift Programming Language

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

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