Swift 面试题
目录

Swift 中如何自定义 Codable 的编码和解码过程?

· 约 3 分钟读完 · 第 151 / 196 章

推荐答案

在 Swift 中,可以通过实现 Codable 协议中的 encode(to:) 和 init(from:) 方法来自定义编码和解码过程。以下是一个示例:

本题详细解读

1. 自定义编码过程

在 encode(to:) 方法中,你可以控制如何将对象的属性编码为数据。通过 encoder.container(keyedBy:) 方法获取一个 KeyedEncodingContainer,然后使用 encode(_:forKey:) 方法将每个属性编码到容器中。你可以在编码过程中添加自定义逻辑,例如将 email 转换为小写。

2. 自定义解码过程

在 init(from:) 方法中,你可以控制如何从数据中解码出对象的属性。通过 decoder.container(keyedBy:) 方法获取一个 KeyedDecodingContainer,然后使用 decode(_:forKey:) 方法从容器中解码出每个属性。你可以在解码过程中添加自定义逻辑,例如将 email 转换为小写。

3. CodingKeys 枚举

CodingKeys 枚举用于定义编码和解码过程中使用的键。每个键对应一个属性名,并且键的类型必须是 String 和 CodingKey。通过 CodingKeys,你可以控制哪些属性参与编码和解码,以及它们的键名。

4. 使用场景

自定义编码和解码过程通常用于以下场景:

  • 需要对数据进行格式化或转换(如大小写转换、日期格式化等)。
  • 需要处理 JSON 中的键名与 Swift 属性名不一致的情况。
  • 需要控制哪些属性参与编码和解码。

通过自定义 Codable 的编码和解码过程,你可以更灵活地处理数据的序列化和反序列化。