Codable&Custom Getter构建错误

问题描述:

我正在做Codable协议的第一步,并在尝试将我的结构与自定义getter混合时发生构建错误。我将如何解决这个问题。我必须编写自定义解码和编码功能吗?Codable&Custom Getter构建错误

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

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

enter image description here

UPDATE:解决方法

我找到了一个解决办法,这不是最佳,但它的工作,通过引入私有变量保存 '真正的' 数据:

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

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

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

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

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

非常感谢您的澄清! – 3vangelos

+0

:)很高兴帮助 –