Swift JSON转model,替代HandyJSON

375 阅读1分钟

先上链接:github.com/zjam9333/My…

介绍

此JSON转模型库基于KeyPath和SwiftMacro实现,轻量化,简单修改可直接替换HandyJSON。

因为SwiftMacro仅用于生成少量代码,不会对恶性拖慢编译速度。

目前已实现功能:

  • 基本的模型定义与使用
  • 支持模型嵌套
  • 支持Enum、Date、自定义转换

使用示例

模型定义

import MyJSONable

@JSONableMacro
struct Animal2: JSONable {
    var boolVal: Bool = false
    var doubleVal: Double = 0
    var intVal: Int = 0
    var stringVal: String = ""
    var child: Child2?
    var child3: [String: Any] = [:]
    @JSONableMacro
    struct Child2: JSONable {
        var age2 = 0
        var name2 = ""
    }
}

模型使用

var animal = Animal2()
let json: [String: Any] = [
    "boolVal": true,
    "doubleVal": 3.14,
    "intVal": 314,
    "stringVal": "New Dog",
    "child": [
        "age2": 100,
        "name2": "New Cow"
    ],
    "child3": [
        "age2": 22,
        "name2": "New 222",
        "stringList": [
            "a", "b", "c",
        ],
    ],
]

animal.decodeFromJson(json: json)

let jsonString = animal.encodeToJsonString()

实现

JSONable协议要求返回allKeyPathList数组,对应了Model的属性和Json的键,decodeFromJson内部就是取这个数组,遍历并写入具体值。

使用Swift Macro可读取此Model所有properties,生成allKeyPathList代码即可。

Swift Macro生成的代码如下,无需手写:

image.png