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
相关产品推荐
相关产品推荐

