Alamofire:具有额外属性的可编码对象

Posted

技术标签:

【中文标题】Alamofire:具有额外属性的可编码对象【英文标题】:Alamofire: Codable object with extra property 【发布时间】:2018-10-15 12:08:05 【问题描述】:

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

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

【问题讨论】:

添加一些关于你所做的事情的代码。在这种情况下很容易为您提供帮助。 你想用那个额外的变量来实现什么?您可以将其设为可选,如果 API 响应中不存在它,它将始终为 nil。对于其他任何事情,您都应该使用计算属性。 【参考方案1】:

您可以简单地为应该只存在于您的 iOS 应用程序模型类中的属性提供一个默认值,然后从您的 CodingKey enum 中省略该属性的名称,您的模型类/结构仍将符合 @987654323 @ 无需将该属性编码/解码到 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)

【讨论】:

以上是关于Alamofire:具有额外属性的可编码对象的主要内容,如果未能解决你的问题,请参考以下文章

将可编码结构编码为 Alamofire POST 参数 - Swift

Swift 4 可编码;如何使用单个根级密钥解码对象

多部分请求 - 带有 UIImage 的可编码结构

哪个是 xcode 7.2 支持的 alamofire 对象映射器和 alamofire pod 版本

如何在可编码结构中使用计算属性(swift)

Swift 中可编码属性的 iOS 通用类型