swift中如何更简洁的 json转model

今天来介绍一个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)

你可能感兴趣的:(swift中如何更简洁的 json转model)