-
Notifications
You must be signed in to change notification settings - Fork 47
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
476 changed files
with
9,232 additions
and
237,862 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
|
Oops, something went wrong.