序号 | 🎯 特性 | 💬 特性说明 💬 | SmartCodable | HandyJSON |
---|---|---|---|---|
1 | 强大的兼容性 | 完美兼容:字段缺失 & 字段值为nul & 字段类型错误 | ✅ | ✅ |
2 | 类型自适应 | 如JSON中是一个Int,但对应Model是String字段,会自动完成转化 | ✅ | ✅ |
3 | 解析Any | 支持解析 [Any], [String: Any] 等类型 | ✅ | ✅ |
4 | 解码回调 | 支持Model解码完成的回调,即:didFinishingMapping | ✅ | ✅ |
5 | 属性初始化值填充 | 当解析失败时,支持使用初始的Model属性的赋值。 | ✅ | ✅ |
6 | 字符串的Model化 | 字符串是json字符串,支持进行Model化解析 | ✅ | ✅ |
7 | 枚举的解析 | 当枚举解析失败时,支持兼容。 | ✅ | ✅ |
8 | 属性的自定义解析 - 重命名 | 自定义解码key(对解码的Model属性重命名) | ✅ | ✅ |
9 | 属性的自定义解析 - 忽略 | 忽略某个Model属性的解码 | ✅ | ✅ |
10 | 支持designatedPath | 实现自定义解析路径 | ✅ | ✅ |
11 | Model的继承 | 在model的继承关系下,Codable的支持力度较弱,使用不便(可以支持) | ❌ | ✅ |
12 | 自定义解析路径 | 指定从json的层级开始解析 | ✅ | ✅ |
13 | 超复杂的数据解码 | 解码过程中,多数据做进一步的整合/处理。如: 数据的扁平化处理 | ✅ | |
14 | 解码性能 | 在解码性能上,SmartCodable 平均强 30% | ✅ | |
15 | 异常解码日志 | 当解码异常进行了兼容处理时,提供排查日志 | ✅ | ❌ |
16 | 安全性方面 | 底层实现的稳定性和安全性。 | ✅ | ❌ |
整体来讲: SmartCodable 和 HandyJSON 相比,在功能和使用上相近。
-
HandyJSON 使用Swift的反射特性来实现数据的序列化和反序列化。该机制是非法的,不安全的, 更多的细节请访问 HandyJSON 的466号issue.
-
Codable 是Swift标准库的一部分,提供了一种声明式的方式来进行序列化和反序列化,它更为通用。
更多内容请查看: 替换指导
内容项 | 内容项说明 | 使用场景 | 替换难度 | 评判理由 |
---|---|---|---|---|
①声明Model | 声明Model | ★★★★★ | ★☆☆☆☆ | 全局将 HandyJSON 替换为 SmartCodable即可。 |
②反序列化 | 数据的模型化(数据转Model) | ★★★★★ | ☆☆☆☆☆ | 完全一样的调用方式,无需处理。 |
③序列化 | 模型的数据化(Model转数据) | ★☆☆☆☆ | ★☆☆☆☆ | 将 toJSON() 替换为 toDictionary() 或 toArray() 。 |
④解码完成的回调 | 解析完成进一步处理数据 | ★★☆☆☆ | ☆☆☆☆☆ | 完全一样的调用方式,无需处理。 |
⑤自定义解析Key | 忽略key的解析 & 自定义Key的映射关系 | ★★★☆☆ | ★★★☆☆ | 需要更改调用方式。 |
⑥解析Any | 解析Any类型的数据。Any,[String: Any], [Any] | ★☆☆☆☆ | ★☆☆☆☆ | 将Any替换为SmartAny |
⑦处理继承关系 | 解析存在的继承关系的Model | ★☆☆☆☆ | ★★★★★ | 建议使用协议实现。 |
⑧枚举的解析 | 解析枚举属性 | ★☆☆☆☆ | ★☆☆☆☆ | 多实现一个 defaultCase |