介绍
此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生成的代码如下,无需手写: