Skip to content

Commit

Permalink
decoder & encoder
Browse files Browse the repository at this point in the history
  • Loading branch information
intsig171 committed Jun 13, 2024
1 parent d869b7e commit a7beed3
Show file tree
Hide file tree
Showing 476 changed files with 9,232 additions and 237,862 deletions.
47 changes: 47 additions & 0 deletions Document/README/CompareWithHandyJSON.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# SmartCodable - Compare With HandyJSON

| 序号 | 🎯 特性 | 💬 特性说明 💬 | 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](https://github.com/alibaba/HandyJSON/issues/466)**.

* **Codable** 是Swift标准库的一部分,提供了一种声明式的方式来进行序列化和反序列化,它更为通用。



## 使用SmartCodable 平替 HandyJSON

更多内容请查看: [替换指导](https://github.com/intsig171/SmartCodable/blob/develop/Document/Suggest/suggest4.md)

| 内容项 | 内容项说明 | 使用场景 | 替换难度 | 评判理由 |
| --------------- | --------------------------------------------- | -------- | -------- | ------------------------------------------------------ |
| ①声明Model | 声明Model | ★★★★★ | ★☆☆☆☆ | 全局将 HandyJSON 替换为 SmartCodable即可。 |
| ②反序列化 | 数据的模型化(数据转Model) | ★★★★★ | ☆☆☆☆☆ | 完全一样的调用方式,无需处理。 |
| ③序列化 | 模型的数据化(Model转数据) | ★☆☆☆☆ | ★☆☆☆☆ |`toJSON()` 替换为 `toDictionary()``toArray()`|
| ④解码完成的回调 | 解析完成进一步处理数据 | ★★☆☆☆ | ☆☆☆☆☆ | 完全一样的调用方式,无需处理。 |
| ⑤自定义解析Key | 忽略key的解析 & 自定义Key的映射关系 | ★★★☆☆ | ★★★☆☆ | 需要更改调用方式。 |
| ⑥解析Any | 解析Any类型的数据。Any,[String: Any][Any] | ★☆☆☆☆ | ★☆☆☆☆ | 将Any替换为SmartAny |
| ⑦处理继承关系 | 解析存在的继承关系的Model | ★☆☆☆☆ | ★★★★★ | 建议使用协议实现。 |
| ⑧枚举的解析 | 解析枚举属性 | ★☆☆☆☆ | ★☆☆☆☆ | 多实现一个 defaultCase |

38 changes: 38 additions & 0 deletions Document/README/LearnMore.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# FAQ



### Responses to questions

| 💡 questions | answers |
| ----------------------------------- | ------------------------------------------------------------ |
| 1 在mapping方法中支持解析忽略 | [不采纳的理由](https://github.com/intsig171/SmartCodable/blob/main/Document/Suggest/suggest1.md) |
| 2 像HandyJSON一样支持继承关系的解析 | [不采纳的理由](https://github.com/intsig171/SmartCodable/blob/main/Document/Suggest/suggest2.md) |
| 3 支持初始值填充 | [实现逻辑](https://github.com/intsig171/SmartCodable/blob/main/Document/Suggest/suggest3.md) |
| 4 提供HandyJSON的替换指导 | [替换指导](https://github.com/intsig171/SmartCodable/blob/main/Document/Suggest/suggest4.md) |
| 5 提供全局的Key映射策略 | [实现逻辑](https://github.com/intsig171/SmartCodable/blob/main/Document/Suggest/suggest5.md) |
| 6 支持UIColor的解析 | [实现逻辑](https://github.com/intsig171/SmartCodable/blob/main/Document/Suggest/suggest6.md) |
| 7 增加单个Value的自定义转换策略 | [实现逻辑](https://github.com/intsig171/SmartCodable/blob/main/Document/Suggest/suggest7.md) |







### About Codable

这是Swift数据解析方案的系列文章:

[Swift数据解析(第一篇) - 技术选型](https://juejin.cn/post/7288517000581070902)

[Swift数据解析(第二篇) - Codable 上](https://juejin.cn/post/7288517000581087286)

[Swift数据解析(第二篇) - Codable 下](https://juejin.cn/post/7288517000581120054)

[Swift数据解析(第三篇) - Codable源码学习](https://juejin.cn/post/7288504491506090023)

[Swift数据解析(第四篇) - SmartCodable 上](https://juejin.cn/post/7288513881735151670)

[Swift数据解析(第四篇) - SmartCodable 下](https://juejin.cn/post/7288517000581169206)

Loading

0 comments on commit a7beed3

Please sign in to comment.