Repository navigation
7.1.0 Beta
Pre-release
Pre-release
本次更新集中修复编解码边界、模型更新与属性包装器相关问题,并新增四项需要显式启用的编解码策略。欢迎在测试项目中试用并反馈兼容性问题。
新增
以下策略默认均保持 .legacy,按需启用:
- 非键控可选元素单次消费:通过
smartUnkeyedDecodingStrategy = .consumeOnce,避免自定义可选元素解码在容错回退时重复推进数组游标。 - 递归动态值编码:通过
smartDynamicValueEncodingStrategy = .recursive,递归编码动态容器中的 Date、Data、URL 和 Encodable 模型,并应用当前 encoder 的编码策略。 - Compact 数组元素转换:通过
SmartCodableOptions.compactElementStrategy = .convert,为@SmartCompact.Array启用字符串到数值/布尔的转换,以及普通 Codable 元素支持。 - 布尔转整数:通过
smartBooleanToIntegerDecodingStrategy = .zeroOrOne,将 JSONtrue/false转换为整数1/0。须通过配置后的 decoder 实例调用smartDecode;deserialize不继承该实例配置。
修复与改进
- 修复整数范围校验和有限浮点数字符串解码,保留十六进制整数字符串支持。
- 修复
SmartUpdater在字段别名冲突时误覆盖其他字段的问题。 - 修复编码 transformer 的属性匹配及编码失败后的模型快照释放。
- 隔离共享 decoder 的调用上下文与日志会话,避免内部状态污染调用方
userInfo。 - 修复颜色往返、属性包装器配置恢复、紧凑模型数组过滤及
@SmartPublished赋值问题。 - 修正顶层 Bool、String、数值编码及
.none日志模式的输出行为。 - 补充回归测试、示例与兼容性文档。
升级注意
本版本包含以下可观察的行为修正,请在升级时重点验证:
- URL:避免重复转义已有百分号编码;
#按 fragment 处理,需要字面量#时请使用%23。 - 手写嵌套编码:
nestedContainer/nestedUnkeyedContainer将内容写入正确的层级与数组位置。 - 数值越界:在截断或舍入前检查原始值范围,越界时回退默认值。例如 UInt8 的
"255.4"不再因截断而被接受。
核心库继续支持 Swift 5.9+、iOS 13+,不依赖 SwiftSyntax。类继承宏由独立的 SmartCodableMacro 包提供。
试用
在 Xcode 的 Swift Package 依赖设置中,选择 Exact Version 并填写 7.1.0-beta.1,或使用:
.package(
url: "https://github.com/iAmMccc/SmartCodable.git",
exact: "7.1.0-beta.1"
)这是预发布版本,建议先验证项目中的自定义 transformer、属性包装器、模型更新与手写编解码逻辑。
如遇问题,请提交 Issue,并附上 JSON、模型定义、调用方式、预期与实际结果,以及 Swift / Xcode 版本。