久久亚洲精品成人_国产精品欧美综合亚洲_亚洲va天堂va欧美ⅴa在线_91色视频在线观看_久久影院亚洲_一级黄色片播放_日韩av在线一区_精品一区二区在线看_老头吃奶性行交视频_日韩免费高清视频_天天操天天爽天天干_日本欧美在线视频

首頁 > 編程 > Swift > 正文

Swift實現JSON轉Model的方法及HandyJSON使用講解

2020-03-09 17:44:59
字體:
來源:轉載
供稿:網友

背景:

很多時候,我們從服務端請求下的數據都是Json格式,我們需要拿這些數據顯示到我們的UI界面。

因此,我們的做法基本都會先將json轉為方便使用的數據模型,或者也可以直接轉字典解決。

在OC中,我們有很多優秀的第三方庫幫助我們實現,比如MJExtension、JSONModel等,這些庫基本都是利用runtime實現讀取屬性名并利用kvc重新賦值屬性。

在Swift中,由于runtime的局限,比較出名的有SwiftyJSON、ObjectMapper等。

其中:

1、SwiftyJSON本質上仍然是根據JSON結構去取值,使用起來順手、清晰;

但這種做法沒能妥善解決上述的幾個問題,因為它不是機遇model的,我們使用的時候,依然必須制定key去獲取value,這在一定程度上不是很友好。

2、ObjectMapper實現了JSON直接轉Model的功能,不過使用起來,代碼量會多一點,因為我們必須遵循Mappable協議,制定json內的每一個key和model屬性的對應關系。

比如:構造的class必須滿足這三個紅框的內容,這對于使用習慣了直接定義Model屬性的同學來說,可能會有點不習慣。

swift,json轉model,handyjson

那么,今天的主角 HandyJSON就出現了,這個庫是阿里一位大神推出的,能夠做到JSON轉Model一步到位,而且使用起來,非常簡潔方便。

關于HandyJSON原理:

摘自網上一段說明如下:

HandyJSON另辟蹊徑,采用Swift反射+內存賦值的方式來構造Model實例,保持原汁原味的Swift類定義。

// 假設這是服務端返回的統一定義的response格式class BaseResponse<T: HandyJSON>: HandyJSON {  var code: Int? // 服務端返回碼  var data: T? // 具體的data的格式和業務相關,故用泛型定義  public required init() {}}// 假設這是某一個業務具體的數據格式定義struct SampleData: HandyJSON {  var id: Int?}let sample = SampleData(id: 2)let resp = BaseResponse<SampleData>()resp.code = 200resp.data = samplelet jsonString = resp.toJSONString()! // 從對象實例轉換到JSON字符串print(jsonString) // print: {"code":200,"data":{"id":2}}if let mappedObject = JSONDeserializer<BaseResponse<SampleData>>.deserializeFrom(json: jsonString) { // 從字符串轉換為對象實例  print(mappedObject.data?.id)}

關于HandyJSON 如何集成使用:

GitHub下載鏈接: https://github.com/alibaba/HandyJSON

 1、pod引入

pod 'HandyJSON'

2、使用時,先頭部import

import HandyJSON 

正文:

1、HandyJSON支持 JSON直接轉Model,定義class時,有兩點注意:

 - 必須遵循HandyJSON協議       

 - 需要實現空的initializer  (當然Struct結構體 可以不需要init(),下文有說明)

class BasicTypes: HandyJSON {  var int: Int = 2  var doubleOptional: Double?  var stringImplicitlyUnwrapped: String!  required init() {}}let jsonString = "{/"doubleOptional/":1.1,/"stringImplicitlyUnwrapped/":/"hello/",/"int/":1}"if let object = BasicTypes.deserialize(from: jsonString) {  // …}

這是最簡單的模型,只有三個屬性,對于復雜的嵌套結構,一樣這樣處理實現,參考下文。

2、HandyJSON還支持Struct,使用方式與Class基本一致

struct BasicTypes: HandyJSON {  var int: Int = 2  var doubleOptional: Double?  var stringImplicitlyUnwrapped: String!}let jsonString = "{/"doubleOptional/":1.1,/"stringImplicitlyUnwrapped/":/"hello/",/"int/":1}"if let object = BasicTypes.deserialize(from: jsonString) {  // …}

這里注意一下,雖然Struct自己已經幫助構造了init初始化,但如果我們需要重載init,構造我們自己的初始化,還是需要寫一下的。

3、HandyJSON支持枚舉,只需要enum構造時服從HandyJSONEnum協議即可。

enum AnimalType: String, HandyJSONEnum {  case Cat = "cat"  case Dog = "dog"  case Bird = "bird"}struct Animal: HandyJSON {  var name: String?  var type: AnimalType?}let jsonString = "{/"type/":/"cat/",/"name/":/"Tom/"}"if let animal = Animal.deserialize(from: jsonString) {  print(animal.type?.rawValue)}

4、此外,HandyJSON還支持一些非基礎類型、復雜類型,包括嵌套結構,如可選、隱式解包可選、集合等

class BasicTypes: HandyJSON {  var bool: Bool = true  var intOptional: Int?  var doubleImplicitlyUnwrapped: Double!  var anyObjectOptional: Any?  var arrayInt: Array<Int> = []  var arrayStringOptional: Array<String>?  var setInt: Set<Int>?  var dictAnyObject: Dictionary<String, Any> = [:]  var nsNumber = 2  var nsString: NSString?  required init() {}}let object = BasicTypes()object.intOptional = 1object.doubleImplicitlyUnwrapped = 1.1object.anyObjectOptional = "StringValue"object.arrayInt = [1, 2]object.arrayStringOptional = ["a", "b"]object.setInt = [1, 2]object.dictAnyObject = ["key1": 1, "key2": "stringValue"]object.nsNumber = 2object.nsString = "nsStringValue"let jsonString = object.toJSONString()!if let object = JSONDeserializer<BasicTypes>.deserializeFrom(json: jsonString) {  // ...}

5、HandyJSON支持指定從哪個具體路徑開始解析,反序列化到Model。

這個比較常用,因為正常情況下,接口一般都會返回包括錯誤碼,錯誤消息,正式請求數據等,但我們一般只需要把正式數據轉換成Model即可。

我們可以這樣實現:

class Cat: HandyJSON {  var id: Int64!  var name: String!  required init() {}}let jsonString = "{/"code/":200,/"msg/":/"success/",/"data/":{/"cat/":{/"id/":12345,/"name/":/"Kitty/"}}}"if let cat = JSONDeserializer<Cat>.deserializeFrom(json: jsonString, designatedPath: "data.cat") {  print(cat.name)}

其中,直接通過 designatedPath 定位到我們需要的節點處。

6、handyJSON支持有繼承關系的Model類,就是說及時某個類沒有實現HandyJSON協議,只要父類有實現,依然可以轉化model。

class Animal: HandyJSON {  var id: Int?  var color: String?  required init() {}}class Cat: Animal {  var name: String?  required init() {}}let jsonString = "{/"id/":12345,/"color/":/"black/",/"name/":/"cat/"}"if let cat = JSONDeserializer<Cat>.deserializeFrom(json: jsonString) {  print(cat)}

7、上面都是基本在說JSON轉模型,那么反過來實現呢?

HandyJSON還支持對象轉字典、對象轉模型。

class BasicTypes: HandyJSON {  var int: Int = 2  var doubleOptional: Double?  var stringImplicitlyUnwrapped: String!  required init() {}}let object = BasicTypes()object.int = 1object.doubleOptional = 1.1object.stringImplicitlyUnwrapped = “hello"print(object.toJSON()!) // 序列化到字典print(object.toJSONString()!) // 序列化到JSON字符串print(object.toJSONString(prettyPrint: true)!) // 序列化為格式化后的JSON字符串

如果需要Demo,可以這樣:

1、下載官方Demo:https://github.com/alibaba/HandyJSON

2、下載我的測試Demo:https://github.com/TangledHusky/TestSwift

swift,json轉model,handyjson

swift,json轉model,handyjsonswift,json轉model,handyjson

以上所述是小編給大家介紹的Swift實現JSON轉Model的方法及HandyJSON使用講解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!

 


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
91精品国产色综合久久不卡98口| 欧美成人免费观看视频| 91欧美视频网站| 久久在线视频在线| 欧美精品一二三| 一区二区三区四区亚洲| jizz一区二区| 五月婷婷深深爱| 天天综合久久综合| 国产中文一区二区| 国产+人+亚洲| 最近2019年手机中文字幕| 欧美一区二区精品在线| 日本久久电影网| 亚洲一二三区视频在线观看| 国产精品天美传媒| 99久久国产综合精品女不卡| 日本特黄久久久高潮| 91成人国产综合久久精品| 神马午夜精品91| 69视频在线观看免费| 国产探花在线观看视频| 五月婷婷深爱五月| 波多野结衣家庭教师在线播放| 亚洲一区二区在线免费观看| 老牛影视免费一区二区| 92福利视频午夜1000合集在线观看| 97在线看免费观看视频在线观看| 欧美成人一区二区三区电影| 久久精品99无色码中文字幕| 色偷偷综合社区| 亚洲性线免费观看视频成熟| 精品国产一区二区亚洲人成毛片| 欧美日韩二区三区| 欧美精品久久一区| 欧美日韩在线精品一区二区三区激情 | 国产又粗又长又爽| 亚洲欧美日韩中文字幕在线观看| 九九九九九国产| 日本r级电影在线观看| 韩国三级与黑人| 国产午夜在线一区二区三区| 污片免费在线观看| 久久艳妇乳肉豪妇荡乳av| 91久久综合亚洲鲁鲁五月天| 99www免费人成精品| 国产主播一区二区三区四区| 日韩精品一区二区三区色偷偷 | 韩国毛片一区二区三区| 精一区二区三区| 国产精品一卡二| 99精品欧美一区二区三区综合在线| 91亚洲男人天堂| 国产精品久久久久久久久快鸭 | 国产在线一区二区综合免费视频| 久久99精品国产麻豆不卡| 国产成人自拍在线| 国产亚洲欧洲997久久综合| 一区二区三区在线影院| 日韩欧美成人网| 欧美成人三级电影在线| 色七七影院综合| 久久久亚洲网站| 欧美性猛交xxxx乱大交蜜桃| 在线观看视频一区二区欧美日韩| 欧美一级黄色大片| 亚洲图片在线综合| 欧美诱惑福利视频| 99www免费人成精品| 亚洲在线视频一区二区| 国产精品无码一本二本三本色| 韩国三级丰满少妇高潮| 久草手机视频在线观看| 少妇无套内谢久久久久| 蜜桃av一区二区| 国产亚洲成aⅴ人片在线观看 | 日本中文字幕网址| 苍井空张开腿实干12次| 久久网免费视频| 国产日韩免费视频| 成人激情小说网站| 狠狠躁夜夜躁人人爽超碰91| 日韩精品一区在线观看| 日韩美女免费线视频| 手机成人在线| 伊人av在线播放| 亚洲欧美综合自拍| 激情五月激情综合网| 亚洲一级片在线观看| 国产视频精品xxxx| 成人激情在线播放| 久久精品国产精品亚洲色婷婷| 欧美激情aaa| 国产熟女精品视频| 2014亚洲片线观看视频免费| 欧美人xxxx| 91精品国产91久久久久久不卡| 日韩高清国产一区在线观看| 超碰人人cao| 天天操天天干天天摸| 成人黄色av网站在线| 在线一区二区三区四区五区 | 久久久在线免费观看| 欧美在线视频二区| 国产a级黄色片| 中文天堂在线视频| 久久综合久久综合亚洲| 日韩欧美视频一区| 国产一区视频在线播放| 免费国产a级片| 青青草激情视频| 国产成人在线电影| 日韩一区二区三区视频在线| 欧美一级大片视频| 国产中文字幕乱人伦在线观看| 午夜成人免费视频| 国产精品无码在线播放| 国产精品无码人妻一区二区在线 | 成人综合网网址| 一本色道久久综合狠狠躁的推荐| 久久精品动漫| 国内精品免费视频| 妺妺窝人体色777777| 国产成人鲁鲁免费视频a| 欧美高清视频不卡网| 国产精品一区久久久久| av综合在线观看| 美女黄色片视频| 一区二区中文字幕| 日韩不卡在线观看日韩不卡视频| 三级影片在线看| 久久精品无码一区二区三区毛片| 男女视频网站在线观看| 日韩精品欧美一区二区三区| 日韩av在线播放资源| 中文字幕在线播放不卡一区| 香蕉影院在线观看| 台湾佬中文在线| 亚洲精品国产一区二| 国产精品影音先锋| 久久精品夜色噜噜亚洲aⅴ| 亚洲视频一区二区免费在线观看| 日韩欧美在线播放| 久草在在线视频| 91在线观看免费网站| 欧美大尺度激情区在线播放| 8x海外华人永久免费日韩内陆视频| 欧美性受xxxx白人性爽| 96国产粉嫩美女| 国产美女视频免费| 国模私拍视频在线观看| 全黄一级裸体片| 国产精品国产av| 国产福利精品一区| 欧美性高跟鞋xxxxhd| 中文字幕国产精品| 亚洲一区二区久久久久久| 国产自产在线视频| 免费黄在线观看| 国产浮力第一页| 国产精品美女久久福利网站| 日韩欧美电影在线| 亚洲一区二区在线| 日韩精品一区二区三区色欲av| 99久久久免费精品| 日本欧美一区二区三区乱码| 午夜欧美视频在线观看| 日韩在线观看免费高清| 亚洲区一区二区三区| 少妇视频在线播放| 国产剧情av麻豆香蕉精品| 2019国产精品| 日韩欧美在线播放| 日韩人体视频一二区| 国产欧美日韩精品丝袜高跟鞋| 国产噜噜噜噜久久久久久久久| 久久久久久九九九| 亚洲妇女无套内射精| 国产麻豆精品久久一二三| 免费99精品国产自在在线| 婷婷激情小说网| 丁香桃色午夜亚洲一区二区三区| 97福利一区二区| 国产一区二区三区四区在线| 一区二区三区国产精品| 麻豆精品视频| 精品人妻一区二区三区换脸明星| 日韩欧美自拍偷拍| 天堂在线资源视频| gogogo免费视频观看亚洲一| 国产日韩在线视频| 中文字幕亚洲高清| 欧美mv和日韩mv的网站| 日韩视频在线免费看| 成人ar影院免费观看视频| 91精品免费久久久久久久久| 亚洲 欧美 成人| 日韩电影免费观看中文字幕| 免费人成视频在线播放| 亚洲品质自拍视频| 亚洲欧美日韩在线综合 | 国产日韩欧美综合在线| 成人国产精品免费视频| 中文字幕第一页在线播放| 亚洲成人黄色网| 不卡的一区二区| 亚洲精品成人在线| 男插女免费视频| 国产精品亚洲午夜一区二区三区 | 一本色道久久综合无码人妻| 亚洲欧美日韩网| 中文字幕乱码在线| 欧美性猛交xxxx乱大交蜜桃| mm1313亚洲国产精品无码试看| 久久网站最新地址| 日韩国产欧美精品| 国内精品久久久久影院一蜜桃| 国产欧美在线看| 99在线精品视频免费观看20| 高清一区二区三区日本久| 日本一区二区三区免费视频| 亚洲男人天堂2023| 中文字幕人妻一区二区三区在线视频| 色诱亚洲精品久久久久久| 乌克兰美女av| 亚洲成人精品影院| 国内自拍视频一区| 亚洲一区免费观看| 国内性生活视频| 成人欧美一区二区三区小说| 日韩xxxx视频| 亚洲欧美另类综合偷拍| 人妻熟女一二三区夜夜爱| 亚洲少妇30p| 免费观看精品视频| 亚洲一区在线观看免费 | 国产福利久久| 三级一区在线视频先锋| 999国产视频| 久久精品久久精品| 九色视频成人porny| 国产盗摄精品一区二区三区在线| 韩日午夜在线资源一区二区| 国产激情视频一区二区三区欧美 | 麻豆精品久久精品色综合| 91久久国产综合久久91精品网站| 天天综合永久入口| 91亚洲精品丁香在线观看| 久久精品国产精品亚洲综合| 欧美lavv| 国产欧美日韩综合| 国产精品无码av无码| 色婷婷av一区二区三区软件| 久久久久中文字幕亚洲精品| 精品成人免费观看| 国产伦精品一区二区三区视频黑人 | 韩国三级丰满少妇高潮| 欧美群妇大交群中文字幕| 中文字幕无码毛片免费看| 日韩一级完整毛片| 国产午夜精品一区二区理论影院| 欧美极品少妇xxxxⅹ喷水| 性做久久久久久久久久| 国产成人免费电影| 国产区在线观看成人精品| 亚洲第一中文av| 日韩欧美国产电影| 亚洲日本视频在线观看| 国产在线日韩在线| 97久久人人超碰| 亚洲欧美自拍另类日韩| 日韩免费电影网站| 国产成人精品777777| 91理论片午午论夜理片久久| 成人免费看的视频| 成人免费在线观看视频网站| 亚洲国产精品热久久| 在线观看国产一区二区三区| 成人欧美一区二区三区黑人免费| 国产视频一区二区在线| 日本精品一二三| 日韩亚洲在线观看| 五月婷婷丁香六月| 美女在线免费视频| 欧美日韩成人激情| 狠狠人妻久久久久久综合| 92看片淫黄大片看国产片| 久久久久久久久久久电影| 中文字幕在线观看91| 久久精品精品电影网| 日韩高清电影一区| 一本大道熟女人妻中文字幕在线 | 91免费观看视频在线| 亚洲一级免费观看| 亚洲欧洲偷拍精品| 欧美一级淫片免费视频魅影视频| 黄色www在线观看| 欧美精品日日鲁夜夜添| 亚洲精品一区二三区| 午夜精品福利一区二区| 欧美在线观看18| 久久久久久久久久一级| 日本中文不卡| 欧美精品电影在线播放| 国产伦精品一区二区三区免.费| 亚洲国产欧洲综合997久久| 日韩欧美精品中文字幕| 五月天激情四射| 一区二区精品在线观看| 7777精品久久久大香线蕉| 91女人18毛片水多国产| 99久re热视频精品98| 欧美v日韩v国产v| 久久一区二区三区超碰国产精品| 凹凸国产熟女精品视频| 视频直播国产精品| 国产99久久久国产精品潘金| av电影在线播放| 国产精品27p| 一区二区三区免费在线观看| 欧美激情国产精品免费| 欧美动漫一区二区| 欧美一级久久久久久久大片| 日韩一级免费视频| 污污网站免费看| 国产91精品久| 亚洲福利电影网| 97人妻一区二区精品免费视频| 69精品丰满人妻无码视频a片| 亚洲欧美在线磁力| 9i在线看片成人免费| 成年人在线免费看片| 国产精品视频免费一区| 欧美另类z0zxhd电影| 美日韩精品视频| 亚洲麻豆一区二区三区| 成人xxxx视频| 欧美日韩一区视频| 美女诱惑黄网站一区| 精品熟女一区二区三区| 亚洲free性xxxx护士白浆| 欧美日韩国产不卡| 日韩激情视频在线观看| 国产在线观看无码免费视频| 春色成人在线视频| 日韩一区二区三区免费观看| 国产福利一区在线| 国产一级片免费看| 久久久久免费看黄a片app| 高清一区二区三区日本久| 五月婷婷欧美视频| 午夜视频在线播放| 手机看片日韩av| 亚洲精品视频一区二区三区| 亚洲人成人99网站| 国产亚洲欧美在线| 色老头在线视频| 国产三级精品三级在线| 97中文在线观看| 精品亚洲国产视频| 国产精品人成在线观看免费 | 亚洲成年人专区| 久久97久久97精品免视看| 亚洲男人都懂的| 美女诱惑一区| 男人添女人下面高潮视频| 青青草一区二区| 在线不卡中文字幕播放| kk眼镜猥琐国模调教系列一区二区| 国产精品美女久久久久av爽| 亚洲这里只有精品| 高清av免费一区中文字幕| 中国日韩欧美久久久久久久久 | 男女av免费观看| 国产一区欧美二区三区| 日韩美女一区二区三区四区| 2014亚洲片线观看视频免费| 国产精品无码专区av免费播放| 久久久久无码国产精品一区李宗瑞| 欧美精品一区二区三区在线四季 | 中文字幕久久久久| 无码任你躁久久久久久老妇| 亚洲精品日韩成人| 日本不卡免费高清视频| 精品国产伦一区二区三区观看体验| 国产日韩欧美精品电影三级在线| 国产精品久久无码一三区| 欧美丰满美乳xxⅹ高潮www| 国产激情片在线观看| 亚洲女人被黑人巨大进入al | 日本三级黄色网址| 免费看成人午夜电影| 久久99精品久久久久久青青91 | 中文字幕一区二区三区不卡在线 | 91精品国产91久久久| 欧美mv日韩mv国产| 一区二区激情视频| 天天摸天天干天天操| 日本在线视频中文字幕| 国产伦精品一区二区三区妓女下载| 日韩成人av网站| 国产精品电影网| 日韩一二三在线视频播| 制服丝袜亚洲精品中文字幕| 中文字幕亚洲视频| 国产精品白丝jk白祙喷水网站| 成人毛片在线免费观看| 成人在线免费看视频| 日韩精品电影一区二区三区| 免费看三级黄色片|