Swift笔记33:HandyJSON

HandyJSON的基本使用

1 引入import HandyJSON
2 创建基本数据模型
(2.1) 遵守 HandyJSON
(2.2 ) 实现HandyJSON协议的init方法
(2.3) mapping 方法用来映射。把解析到的json数据,赋值给其他的变量。有2个好处:可以用去区分服务端字段和我们自定义的属性字段,同时也会解包。
3 HandyJSON接收数据,然后就会自动映射到属性,我们可以点语法直接使用

查看demo

协议中定义初始化器init,非final类实现时必须加上required
模型和嵌套模型都可以继承NSObject,要注意override重写方法
HandyJSON 中通过运算符重载mapping实现多种模型转换方法

需要解析的数据
{
  "list": [
    {
      "desc": "资布给回管并转例快真应社斗。",
      "name": "蔡平",
      "num": 25
    }
}
模型实列
import HandyJSON
import UIKit

class BookHandyJsonModel: HandyJSON {
    var list = [BookModel()] // 嵌套模型
    required init() {}
}

class BookModel: HandyJSON {
    var desc: String?
    var name: String?
    var num: String?
    var my_desc: String = ""
    var my_name: String = ""
//    @objc var info = Info()//嵌套模型
    required init() {}
    var cellHeight: CGFloat {
        var height = 0.0
        let labelWidrh = kScreenWidth - 130
        let font = 17.0
        guard let contentHeight = desc?.RD_getStringHeight(labelWidrh, font) else { return 0 }
        height += contentHeight
        height += 10 + 10
        return height > 60 ? height : 60.0
    }

    func mapping(mapper: HelpingMapper) {
        mapper <<< self.my_desc <-- "desc" // 把desc 转换为模型中的 my_desc
        mapper <<< self.my_name <-- "name" // 把name 转换为模型中的 my_name
    }
}

// 子模型
class BookInfo: NSObject, HandyJSON {
    @objc var img: String = ""
    @objc var name: String = ""
    override required init() {}

    override var description: String {
        return self.dictionaryWithValues(forKeys: ["img",
                                                   "name"]).description
    }
}
具体使用

网络获取数据并解析
直接使用.语法就可以映射对应的模型字段

func getNetModel() {
    let url = GlobalConfig.BOOKLIST_URL
    let parameters = ["key": "value"]
    DispatchQueue.global().async {
        Alamofire.request(url, method: .get, parameters: parameters, encoding: URLEncoding.default, headers: nil).responseJSON(completionHandler: { [weak self] response in
            if let res = response.result.value {
                let dic = res as? [String: Any]
                /// HandyJSON接受字典
                guard let resObj = BookHandyJsonModel.deserialize(from: dic), let self = self else { return }
                bookArray.removeAll()
                bookArray = resObj.list
                mTableView.reloadData()
            }
        })
    }
}
let bookModel = bookArray[0]
print("desc:", bookModel.desc as Any) // desc: Optional("放片干关支清军至战广青期名别过。
print("name:", bookModel.name as Any) // name: Optional("金超")
print("num:", bookModel.num as Any) // num: Optional("23")
print("cellHeight:", bookModel.cellHeight) // cellHeight: 101.1484375
print("my_desc:", bookModel.my_desc) // my_desc: 放片干关支清军至战广青期名别过
print("my_name:", bookModel.my_name) // my_name: 金超
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容