首页 > 解决方案 > Alamofire:具有额外属性的可编码对象

问题描述

我有一个使用 Alamofire 检索的 Codable 对象模型。但是我想在模型中添加额外的布尔变量,这不是服务器端模型的一部分,这在 iOS 上可能吗?

为了符合 Codable 协议,我需要将它添加到 CodingKeys 枚举中,但如果我这样做了,它会尝试从不存在的服务器解析属性。

标签: iosswiftalamofirecodable

解决方案


您可以简单地为应该只存在于您的 iOS 应用程序模型类中的属性提供一个默认值,然后从您的模型类/结构中省略该属性的名称,CodingKey enum您的模型类/结构仍将符合,Codable而无需将该属性编码/解码到/从JSON。

您可以在下面找到一个示例。

struct Person: Decodable {
    let name:String
    let age:Int
    var cached = false //not part of the JSON

    enum CodingKeys:String,CodingKey {
        case name, age
    }
}

let json = """
{"name":"John",
"age":22}
"""

do {
    let person = try JSONDecoder().decode(Person.self,from: json.data(using: .utf8)!)
    print(person) // Person(name: "John", age: 22, cached: false)
} catch {
    print(error)
}

推荐阅读