You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift API响应模型适配:处理动态新增的additional_data字段

解决Swift Codable动态字段解析问题

你的核心问题在于自定义了DataClass的init(from:)方法,其实完全没必要——Swift的Codable原生就支持可选字段的自动处理:当JSON中不存在对应key时,可选属性会自动被设为nil,反而自定义初始化可能引入不必要的复杂度。

调整后的模型代码

struct ServicingModel: Codable {
    var data: DataClass?
    var code: Int?
    var message: String?
}

struct DataClass: Codable {
    var id: Int?
    var status: String?
    var additionalData: AdditionalData?
    
    enum CodingKeys: String, CodingKey {
        case id, status
        case additionalData = "additional_data"
    }
    // 移除自定义init,使用Swift自动合成的Codable实现
}

struct AdditionalData: Codable {
    var id, bookingID: Int?
    var checklistDone: String?
    var workWithPrice: String?
    var workPrice: String?
    var status: String?
    
    enum CodingKeys: String, CodingKey {
        case id
        case bookingID = "booking_id"
        case checklistDone = "checklist_done"
        case workWithPrice = "work_with_price"
        case workPrice = "work_price"
        case status
    }
}

效果说明

  • 当API返回status: "open"(无additional_data字段)时,additionalData会自动赋值为nil,解析流程正常。
  • 当API返回status: "completed"(包含additional_data字段)时,Codable会自动解析该嵌套对象并赋值给additionalData。

如果确实需要保留自定义初始化逻辑(比如有额外业务处理),你原有的init(from:)逻辑本身是正确的,但需要检查是否存在拼写错误或其他细节问题——不过移除自定义初始化是最简洁可靠的解决方案。

内容的提问来源于stack exchange,提问作者Arish Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 02:37:13