今天来介绍一个swift好用的库 类似YYModel的库 HandyJSON
一、HandyJSON简介
HandyJSON 是阿里开发的是一个用Swift编写的框架,用于在iOS上轻松地转换模型对象(纯类/结构)到JSON。 与其他特性相比,HandyJSON最重要的特性是它不需要从NSObject继承对象(不使用KVC而是反射),也没有实现“映射”函数(直接将值写入内存以实现属性赋值)。 HandyJSON完全依赖于从Swift运行时代码推断出来的内存布局规则
二、HandyJSON导入项目
1、用cocoapod的方式导入
podfile文件里加入:pod 'HandyJSON'
三、HandyJSON简单使用
1、字典如何转model
自定义model类 要继承 HandyJSON
import HandyJSON
class Person: HandyJSON {
var name: String = ""
var age: Int = 0
var mood: Bool = true
var hobby: String = ""
required init() {
}
}
//例 网络请求回来的数据转换为字典
var dic: [String: Any] = [:]
dic["name"] = "k"
dic["age"] = 10
dic["mood"] = true
dic["hobby"] = "girl"
let person = Person.deserialize(from: dic)
print(person!)
2.model如何转换字典 (注意事项)
let person = Person.deserialize(from: dic)
if let person = person {
let personDic = Person.toJSON(person)
print(personDic())///这里注意如何要使用字典一定加()personDic() 否则会报错
}
3.字段自定义如何处理 (当model的属性名和json里的对应不上,person里实现
mapping函数去对应key就可以了)
自定义模型类
import HandyJSON
class Person: HandyJSON {
var name: String = ""
var age: Int = 0
var mood: Bool = true
var hobby: String = ""
required init() {
}
///重写 mapping 方法
func mapping(mapper: HelpingMapper) {
mapper <<< self.name <-- "name_id" //语法直接复制
}
}
///例 网络请求回来的数据转换为字典
var dic: [String: Any] = [:]
dic["name_id"] = "k"
dic["age"] = 10
dic["mood"] = true
dic["hobby"] = "girl”
let person = Person.deserialize(from: dic)
print(person!)
4.模型包含数组处理方式
import HandyJSON
class Person: HandyJSON {
var name: String = ""
var age: Int = 0
var mood: Bool = true
var hobby: String = ""
var animals: [Animal]?
required init() {
}
}
class Animal: HandyJSON {
var name: String = ""
var age: Int = 0
required init() {
}
}
例 网络请求回来的数据转换为字典
var arr: [[String: Any]] = [[String: Any]]()
for i in 0..<5 {
var dic: [String: Any] = [:]
dic["name"] = "abc\(i)"
dic["age"] = 10
arr.append(dic)
}
var dic: [String: Any] = [:]
dic["name"] = "k"
dic["age"] = 10
dic["mood"] = true
dic["hobby"] = “girl”
dic["animal"] = arr
let person = Person.deserialize(from: dic)
print(person!)
5.如何把model转换字符串
let person = Person.deserialize(from: dic)
let string = person?.toJSONString()
print(string)