swift 中使用Codable進(jìn)行數(shù)據(jù)解析

從蘋果公開的public文件內(nèi),我們能看到Codable 其實是Decodable和Encodable兩個協(xié)議的總和.遵從Codable協(xié)議就需要遵從這兩個協(xié)議內(nèi)聲明的方法

?? ? Decodable內(nèi)聲明的init(from)方法來實現(xiàn)解析并實例化,

?? ? Encodable對應(yīng)的encode(to encoder: Encoder)來實現(xiàn)歸檔.

舉例:結(jié)構(gòu)體和Json 數(shù)據(jù)的相互轉(zhuǎn)換

? ? 結(jié)構(gòu)體要遵守Codable 協(xié)議

結(jié)構(gòu)體-> json 數(shù)據(jù) 使用JSEncoder


json 數(shù)據(jù)轉(zhuǎn)化為結(jié)構(gòu)體,使用JSDecoder

? ??


Codable 可以將網(wǎng)絡(luò)數(shù)據(jù)解析為自定義模型:


從蘋果公開的public文件內(nèi),我們能看到Codable 其實是Decodable和Encodable兩個協(xié)議的總和.遵從Codable協(xié)議就需要遵從這兩個協(xié)議內(nèi)聲明的方法.Decodable內(nèi)聲明的init(from)方法來實現(xiàn)解析并實例化,Encodable對應(yīng)的encode(to encoder: Encoder)來實現(xiàn)歸檔。

如何使用Codable?

????以結(jié)構(gòu)體為模型數(shù)據(jù)為例:

????首先定義的結(jié)構(gòu)體要遵守Codable協(xié)議:


如果你的部分參數(shù)和后臺字段不一致,需要定義CodingKeys枚舉,并且遵守String 和CodingKey協(xié)議,注意,書寫這個枚舉是為了修正和后臺字段不一致的情況,一旦寫了這個枚舉,所有需要自動解析的字段你都需要寫進(jìn)來,因為自動解析需要這個枚舉;反之如果不需要修正,就不要寫這個枚舉。

然后你就可以將網(wǎng)絡(luò)數(shù)據(jù)轉(zhuǎn)換為你的目標(biāo)類型模型:

創(chuàng)建JSONDecoder變量,然后調(diào)用decode方法轉(zhuǎn)換即可


如果你把類作為數(shù)據(jù)模型,如果數(shù)據(jù)模型B繼承于A,則需要做一些處理

像下面就會出現(xiàn)問題,你只能解析子類中的屬性,父類中無法拿到

這里需要手動對父類的屬性進(jìn)行賦值,同時還必須聲明CodingKeys枚舉



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容