用途:帮助 Swift 开发者正确处理 Codable(Encodable 与 Decodable)的编解码,覆盖 JSON 序列化、字段映射与持久化兼容等常见场景。
主要能力:基础遵循与 CodingKeys 字段名映射;通过 JSONDecoder 的 keyDecodingStrategy、dateDecodingStrategy、dataDecodingStrategy 配置策略,而非手写解码逻辑;需要自定义转换时实现 init(from:) 与 encode(to:);多态类型借助鉴别键先解码父容器再解具体类型;容错数组在 unkeyed container 中用 try/catch 跳过损坏元素并保留有效项;结合 SwiftData @Model 讨论持久化边界。
必要用法示例: struct UserProfile: Codable { let id: UUID var displayName: String var emailAddress: String enum CodingKeys: String, CodingKey { case id case displayName = "display_name" case emailAddress = "email" } } let decoder = JSONDecoder() decoder.keyDecodingStrategy = .convertFromSnakeCase decoder.dateDecodingStrategy = .iso8601 decoder.dataDecodingStrategy = .base64 let profiles = try decoder.decode([UserProfile].self, from: jsonData)
适用场景:网络接口解析、混合数组与容错数据源、需要 schema 稳定的 SwiftData 持久化模型。
限制与注意:.convertFromSnakeCase 对缩写处理不佳(如 server_url 变为 serverUrl 而非 serverURL),非标准映射应显式写 CodingKeys;显式 CodingKeys 与 convertFromSnakeCase 同时使用会导致二次转换不匹配;自定义 init(from:) 必须初始化全部存储属性;默认日期解码以 2001 年为起点,需显式指定 .iso8601 或 .millisecondsSince1970;单条坏数据不应让整个集合解码失败;调试时查看 DecodingError.keyNotFound、.typeMismatch、.valueNotFound 详情。审查清单还包括优先使用自动合成、检查缩写转换、为新增属性提供默认值以防迁移崩溃。其余细节见 references/codable-advanced-patterns.md。