從蘋果公開的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枚舉