SuperAPI AI 工具集

axiom-codable

编程与开发

查看项目

更新于 10-15 20:11

技能介绍

用途:这是一份 Swift Codable 协议实践指南,面向 Swift 6.x,用于处理 JSON 与 PropertyList 的编码和解码,帮助在类型与外部数据格式之间建立映射。

主要能力:

  1. 自动合成:当所有存储属性均为 Codable 时,仅需添加 : Codable 即可自动合成;涵盖结构体与枚举(原始值枚举、无关联值枚举、带关联值枚举)的合成规则。
  2. CodingKeys 定制:重命名键、排除属性(被排除属性需有默认值)、配合 .convertFromSnakeCase 做蛇形转驼峰,以及用 {CaseName}CodingKeys 定制枚举关联值的键名。
  3. 手动实现:当 JSON 与模型结构不一致时,实现 init(from:) 与 encode(to:),使用 Keyed、Unkeyed、Single-value、Nested 容器,或用桥接类型处理结构性差异。
  4. 日期处理:内置 .iso8601、.secondsSince1970、.millisecondsSince1970、.formatted 与 .custom 策略;自定义 DateFormatter 需设置 locale 与 timeZone。
  5. 类型转换:StringBacked 包装器处理数字以字符串返回的 API,以及宽松类型强制转换。
  6. 进阶模式:DecodableWithConfiguration(iOS 15+)注入 JSON 中不存在的数据、部分解码、userInfo 兼容方案。
  7. 调试:区分 keyNotFound、typeMismatch、valueNotFound、dataCorrupted 等 DecodingError,并用 prettyPrinted、codingPath、JSONSerialization 辅助排查。

使用方式:按决策树选择方案——属性全为 Codable 用自动合成;键名不一致或需排除属性用 CodingKeys;枚举带关联值注意为关联值加标签,否则会生成 _0、_1 键;结构差异大用桥接类型;需要外部数据用 DecodableWithConfiguration。

适用场景:Swift 项目中的网络响应解析、本地持久化、API 模型映射等。

限制:自动合成对计算属性、非 Codable 属性、属性包装器(如 @Published、@State)和类继承不适用;文档建议避免用 try? 吞掉 DecodingError,避免手工拼接 JSON 字符串,避免用 JSONSerialization 处理 Codable 类型,并强调日期需带时区。具体平台版本与性能细节以官方资料为准。