intsig171 / SmartCodable

SmartCodable is a data parsing library based on Codable. It is simple to use, with robust compatibility being one of its main features. SmartCodable 是基于Codable实现的数据解析库。简单易用,强悍的兼容性是SmartCodable的主要特点。 表层API和功能几乎和HandyJSON一致,支持快速的迁移。
https://smart-codable.vercel.app
MIT License
417 stars 43 forks source link

枚举类型不匹配的时候没有使用默认值 #16

Closed zxhkit closed 6 months ago

zxhkit commented 6 months ago

3.3.1中,json转模型,枚举类型不匹配的时候,没有使用默认值。 例如:下例中默认值都是.good

struct QLSocial: SmartCodable { var n_type: QLPersonType = .good var g_type: QLPersonType = .good }

public enum QLPersonType: Int, SmartCaseDefaultable {
    static var defaultCase: QLPersonType = .normal
    case normal = 0
    case good = 1
    case best = 2
}

let json1 = """ { "n_type": 2, "g_type": "2" } """

let model1 = QLSocial.deserialize(from: json1)

打印结果:

intsig171 commented 6 months ago

V3.3.2 版本已修复该问题,正确的输出为// QLSocial(n_type: QLPersonType.best, g_type: QLPersonType.good))。

intsig171 commented 6 months ago

另外: 关于枚举的类型兼容,会在下个小版本支持。 支持之后,该案例的打印会是: QLSocial(n_type: QLPersonType.best, g_type: QLPersonType.best))

zxhkit commented 6 months ago

把这个defaultCase去掉吧,写着好烦人。

intsig171 commented 6 months ago

把这个defaultCase去掉吧,写着好烦人。

defaultCase代表当前枚举类型的默认值。就如同Bool的默认值是falsee一样。 兼容失败的时候,会走默认值逻辑(最后的兜底)。

枚举的解析相对复杂,场景更多。线上验证之后(不会进入兜底逻辑),defaultCase会在接下来某个版本去掉 。

intsig171 commented 4 months ago

defaultCase 已去掉。