知识卡片

Codable 协议自动派生序列化代码

专业/工作 · 728

内容

一个结构体只要遵循 Codable 协议(Encodable + Decodable 的组合),编译器会根据它的属性名和类型自动生成与 JSON 互转所需的全部样板代码,不用像很多语言那样为每个字段手写”取出这个 key 的值、转成对应类型、赋给对应属性”这类映射逻辑。编码时把实例交给 JSONEncoder,解码时把原始数据交给 JSONDecoder 并指定目标类型,失败了走 do-catch 分支(呼应 [[错误处理与可选类型的分工边界]]),因为外部数据的格式永远不能被信任是完全符合预期的。这背后是编译器利用类型的属性结构做”镜像反射”来生成转换代码的思路,把”数据模型”和”数据的网络传输格式”这两件事解耦:业务代码只需要维护一份 struct 定义,序列化格式的兼容性交给协议机制去保证。

参考来源

《Swift全解析:新式iOS实战开发》第23章《中级》