不吃药不打针,不使用第三方--Swift使用原生Codable协议JSON转模型

AlamofireCodable

通过Alamofire请求数据,将数据一步到位转为基于遵守Codable协议的模型!

使用原生的Codable协议进行JSON转模型!

例如有下面这样的JSON:

{
  "code": 0,
  "list": [
    {
      "topicDesc": "错过线下行前说明会?这里有一份超完整的澳洲行前攻略给你。",
      "createTime": null,
      "topicImageUrl": "http:\\/\\/cdn.timez1.com\\/20180608\\/18626cd2106344078969afd77acf3572.jpg",
      "id": 12,
      "topicStatus": 1,
      "upTime": "2018-06-13 14:46:06",
      "topicOrder": 21,
      "topicTittle": "澳洲行前"
    },
    {
      "topicDesc": "错过线下行前说明会?这里有一份超完整的英国行前攻略给你。",
      "createTime": null,
      "topicImageUrl": "http:\\/\\/cdn.timez1.com\\/20180608\\/d27a7923a24d4cd6878fe08fa338be45.jpg",
      "id": 10,
      "topicStatus": 1,
      "upTime": "2018-06-13 14:46:17",
      "topicOrder": 20,
      "topicTittle": "英国行前"
    },
    {
      "topicDesc": "每月准时更新!留学时区为你搜集6月份留学活动资讯,想参加活动就来吧~",
      "createTime": null,
      "topicImageUrl": "http:\\/\\/cdn.timez1.com\\/20180613\\/ad2983334ede4b18a0ac39e2af2df7de.jpg",
      "id": 13,
      "topicStatus": 1,
      "upTime": "2018-06-13 14:46:34",
      "topicOrder": 19,
      "topicTittle": "活动推荐"
    },
    {
      "topicDesc": "英国留学 - 5分钟语音微讲座",
      "createTime": null,
      "topicImageUrl": "http:\\/\\/cdn.timez1.com\\/20180507\\/de7598df27a048949d7108f084156f2e.jpg",
      "id": 8,
      "topicStatus": 1,
      "upTime": "2018-05-29 15:42:44",
      "topicOrder": 17,
      "topicTittle": "英国语音"
    },
    {
      "topicDesc": "美国留学 - 5分钟语音微讲座",
      "createTime": null,
      "topicImageUrl": "http:\\/\\/cdn.timez1.com\\/20180507\\/c052c8d666d54533aa823cf7991f83b6.jpg",
      "id": 7,
      "topicStatus": 1,
      "upTime": "2018-05-29 15:42:37",
      "topicOrder": 16,
      "topicTittle": "美国语音"
    },
    {
      "topicDesc": "澳大利亚留学 - 5分钟语音微讲座",
      "createTime": null,
      "topicImageUrl": "http:\\/\\/cdn.timez1.com\\/20180507\\/67189c3eb55b4ead98952c66722a0515.jpg",
      "id": 6,
      "topicStatus": 1,
      "upTime": "2018-06-25 10:48:41",
      "topicOrder": 15,
      "topicTittle": "澳洲语音"
    }
  ]
}

可以通过一些网站获取其模型,我们让每一个自定义的模型遵守Codable协议,如下:

struct Item: Codable {
    var topicOrder: Int?
    var id: Int?
    var topicDesc: String?
    var topicTittle: String?
    var upTime: String?
    var topicImageUrl: String?
    var topicStatus: Int?
}

struct Topics: Codable {
    var list: [Item]?
    var code: Int?
}

我们就可以通过Alamofire和我写一个分类方法responseCodable获取其模型了:

// 获取整个模型
Alamofire.request("http://sun.topray-media.cn/tz_inf/api/topics", method: .post).responseCodable { (response: DataResponse<Topics>) in
    guard let value = response.value else { return }
    print(value)
}

当然我们也可以通过其keyPath获取其更底层的模型:

// keyPath目标的请求Model
Alamofire.request("http://sun.topray-media.cn/tz_inf/api/topics", method: .post).responseCodable(queue: nil, keyPath: "list") { (response: DataResponse<[Item]>) in
    guard let list = response.value else { return }
    print(list)
}

AlamofireCodable的优势

  1. 完全使用系统协议,不依赖于其他JSON转模型的框架,就算不使用Alamofire,可以使用原生的请求一步到位获取模型.
  2. 不用区分响应的是Object或者是[Object],上面的例子已经可以看出.
  3. keyPath获取深层次的keyPath下的模型,可以在requestModel2的方法中看具体实现,而ObjectMapper只能获取一层下面的模型.
  4. 定义的模型简单,模型类或者结构体只需要遵守Codable协议即可.
  5. 涉及模型中定义自定义数据的,可以在Demo中Model2进行详细了解,这里只说重点,实现Decodable协议的具体方法!

pod使用注意

目前仅推到我自己的私有库,具体如何使用,可以参看该页面的使用说明.
至于原因,是有位大哥已经使用了AlamofireCodable在Cocoapods占了坑,那位大哥的写法借鉴了AlamofireObjectMapper.我没有办法推到Cocoapods上面去.

文章参考

Encoding and Decoding Custom Types

Using JSON with Custom Types

Demo地址

AlamofireCodable

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容

  • 所有文章已搬迁到个人站点:me.harley-xk.studio,欢迎访问留言 WWDC 过去有一段时间了,最近终...
    群星陨落阅读 33,975评论 48 145
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,611评论 4 59
  • 一、前言 最近进入新公司开展新项目,我发现公司项目的网络层很 OC ,最让人无法忍受的是数据解析是在网络层之外的,...
    程序犭袁阅读 937评论 1 7
  • 2018-07-09 制作的艾蒿绒膏药 去湿健脾
    爱新觉罗白水墨阅读 110评论 0 0
  • 近些年来,旅游热持续发展。前段时间“不旅行难受鸭”上了微博热搜。小学生春游、毕业旅行、情侣旅拍、老年游等等,...
    艺筱颜阅读 501评论 2 6