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

Swift使用Codable解码时报keyNotFound找不到type字段错误如何解决

错误原因

你自定义实现的encode(to:)方法仅编码了data字段,没有将type字段写入编码容器,导致解码时无法找到对应的type键,直接抛出keyNotFound错误。此外你的编码逻辑还遗漏了WorkoutsData中.challenge分支的处理,会导致该类型数据编码异常。

修复方案

替换你现有的encode(to:)实现,补全type字段编码和遗漏的分支处理即可:

extension OverviewWorkout {
    func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        // 编码type字段
        try container.encode(type, forKey: .type)
        switch data {
        case .workout(let workout):
            try container.encode(workout, forKey: .data)
        case .challenge(let workout):
            try container.encode(workout, forKey: .data)
        case .bodyArea(let bodyarea):
            try container.encode(bodyarea, forKey: .data)
        case .title(let title):
            try container.encode(title, forKey: .data)
        case .coach(let coach):
            try container.encode(coach, forKey: .data)
        case .trainer(let trainer):
            try container.encode(trainer, forKey: .data)
        case .group(let group):
            try container.encode(group, forKey: .data)
        }
    }
}
额外注意事项
  • 如果你是解码第三方返回的JSON数据而非自己编码生成的数据,请确认返回的JSON结构中确实存在type字段,且字段值的大小写、拼写和你定义的WorkoutType枚举的原始值完全匹配
  • 如果type字段的实际键名和你定义的CodingKeys不一致,可以修改CodingKeys的原始值做映射,比如后端返回键名为workout_type时,修改为case type = "workout_type"即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:15:03