【问题标题】:Codable & Custom Getter Build Errors可编码和自定义 Getter 构建错误
【发布时间】:2017-08-10 13:26:55
【问题描述】:

我正在使用 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"
  }
}

【问题讨论】:

    标签: swift swift4 codable


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢您的澄清!
    • :) 很高兴为您提供帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    相关资源
    最近更新 更多