You need to enable JavaScript to run this app. SwiftUI拉取API JSON数据时触发keyNotFound解码错误求助
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI拉取API JSON数据时触发keyNotFound解码错误求助

报错核心原因

Swift Codable协议的自动合成逻辑存在一个常见认知误区:

  • 即便你给属性设置了默认值,只要没有手动自定义CodingKeys,解码器会把结构体中所有存储属性都纳入必选匹配的JSON字段列表
  • 你在Post中定义的id属性,被自动纳入了解码需要匹配的字段范围,但接口返回的posts数组里完全不存在id键,解码器解析第一条post时找不到对应值,就会直接抛出keyNotFound错误
修正方案

通过自定义CodingKeys枚举,明确指定仅匹配接口返回的存在字段,让本地生成的id不参与解码流程,改动如下:

struct Post: Codable, Identifiable {
    // 枚举内只列出接口真实存在的字段
    private enum CodingKeys: String, CodingKey {
        case text, date
    }
    public var id = UUID()
    public var text, date: String
}

改完替换原有Post结构体即可正常解码运行。

其他注意事项
  • 原代码中URL(string: "api goes here")!使用了强解包逻辑,当字符串无法生成合法URL时会直接触发崩溃,上线前建议替换为真实接口地址,同时增加URL合法性校验
  • 接口返回的日期为MM/dd/yyyy格式的字符串,后续如需做日期格式化,可在解码时为JSONDecoder配置自定义日期解析策略,无需额外修改模型结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 22:36:02