SwiftyJSON源代碼學習(四)

概述

還是以{ "imageName": "Lina", "urls": ["http://www.anExample.com", "http://www.anotherExample.com"] }為例,通過上文已分析的源碼,已經(jīng)可以用json["urls"][0]的方式來取得第一個url,然而此時拿到的卻不是http://www.anExample.com的url,而是一個JOSN結(jié)構(gòu)體,我們還需要一個方式把該結(jié)構(gòu)體變成實際可用的swift類型。為了使用更加方便,還需要提供字面值構(gòu)造方法以及支持打印。

獲取最終結(jié)果

通過前面系統(tǒng)文章的分析,實際的最終結(jié)果值已經(jīng)被賦值給了對應的rawValue屬性,被通過計算屬性object進行整合。但是object類型為Any,并且還不具備開篇說的怎么玩都不會崩潰的功能。
SwiftyJSON通過增加一系列屬性,包含了全部開發(fā)中可能的目標類型,讓用戶方便的獲取想要類型的最終結(jié)果。如array arrayValue string stringValue等等,沒有Value后綴的版本如string,如果不能把最終結(jié)果轉(zhuǎn)化為對應的類型,將返回nil;而有Value的版本如stringValue,如果不能把最終結(jié)果轉(zhuǎn)化為對應的類型,將返回""空字符串。
實現(xiàn)邏輯較簡單,因為具體的類型和數(shù)據(jù)都已經(jīng)在前面處理完成,只需要對類型進行判斷,如果與屬性相符返回相應的rowValue,如果不相符嘗試轉(zhuǎn)換或直接返回nil(如果是Value版本返回默認值)

面向協(xié)議編程(續(xù))

上文已經(jīng)使用了ComparableCollection協(xié)議把JSON結(jié)構(gòu)體擴展為了swift集合類型,并通過集合類型內(nèi)置的subscript特性獲得了非常方便的獲取復雜JSON結(jié)構(gòu)體任意深度數(shù)據(jù)的方式。
本文繼續(xù)分析LiteralConvertible RawRepresentable CustomStringConvertible CustomDebugStringConvertible 等協(xié)議在SwiftyJSON中的使用。

關(guān)于LiteralConvertible系列協(xié)議

實現(xiàn)該系列協(xié)議可以獲得直接使用字面值生成實例的特性。如let str = "hello",之所以String類型可以直接使用字符串字面值"hello"來生成實例str,就是因為String類型實現(xiàn)了ExpressibleByStringLiteral協(xié)議。
可想而知,協(xié)議內(nèi)容就是一個以指定類型為參數(shù)的構(gòu)造方法。

關(guān)于RawRepresentable協(xié)議

RawRepresentable協(xié)議提供的是原類型實例與協(xié)議中rawValue類型實例的相互轉(zhuǎn)化能力,一般用在枚舉類型。SwiftyJSON中主要通過以rawValue為基礎(chǔ)擴展rawDatarawString來實現(xiàn)JSON結(jié)構(gòu)體序列化為Data String等類型。
協(xié)議內(nèi)容為一個以rawValue為參數(shù)的構(gòu)造方法和一個rawValue屬性

關(guān)于CustomStringConvertibleCustomDebugStringConvertible 協(xié)議

實現(xiàn)該協(xié)議可以在控制臺把實例的有用信息打印出來,協(xié)議內(nèi)容是一個description的字符串類型屬性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • 概述 本文正式開始分析SwiftyJSON。 原生的JSONSerialization已經(jīng)實現(xiàn)了高效的Data和A...
    YinSJ閱讀 1,312評論 0 1
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,194評論 1 10
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,425評論 6 13
  • 時間是一匹星河下狂奔的馬 抖動的肩和揚起的鞭 他嘶嘶的喘著粗氣 和我的呼吸呼應著 好像氣體傳遞了要去的地方 時間他...
    大棚蓋澆飯閱讀 156評論 0 0

友情鏈接更多精彩內(nèi)容