Skip to content

7.1.0 Beta

Pre-release
Pre-release

Choose a tag to compare

@Rock-Connotation Rock-Connotation released this 11 Nov 02:07

本次更新集中修复编解码边界、模型更新与属性包装器相关问题,并新增四项需要显式启用的编解码策略。欢迎在测试项目中试用并反馈兼容性问题。

新增

以下策略默认均保持 .legacy,按需启用:

  • 非键控可选元素单次消费:通过 smartUnkeyedDecodingStrategy = .consumeOnce,避免自定义可选元素解码在容错回退时重复推进数组游标。
  • 递归动态值编码:通过 smartDynamicValueEncodingStrategy = .recursive,递归编码动态容器中的 Date、Data、URL 和 Encodable 模型,并应用当前 encoder 的编码策略。
  • Compact 数组元素转换:通过 SmartCodableOptions.compactElementStrategy = .convert,为 @SmartCompact.Array 启用字符串到数值/布尔的转换,以及普通 Codable 元素支持。
  • 布尔转整数:通过 smartBooleanToIntegerDecodingStrategy = .zeroOrOne,将 JSON true / 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 版本。