Swift使用編解碼庫Codable的過程詳解
Codable 是 Swift 引入的全新的編解碼庫,使開發(fā)者更方便的解析JSON 或 plist 文件。支持枚舉、結(jié)構(gòu)體和類。
Codable協(xié)議定義
Codable代表一個(gè)同時(shí)符合 Decodable 和 Encodable 協(xié)議的類型,即可解碼且可編碼的類型。
typealias Codable = Decodable & Encodable
public protocol Decodable {
public init(from decoder: Decoder) throws
}
public protocol Encodable {
public func encode(to encoder: Encoder) throws
}Codable從 Swift 4 開始引入,包含了 Encoder 和 Decoder 協(xié)議和他們的兩個(gè)實(shí)現(xiàn) JSONEncoder、JSONDecoder 和 PropertyListEncoder、PropertyListDecoder。
其中 Codable 及其相關(guān)協(xié)議放在了標(biāo)準(zhǔn)庫中,而具體的 Encoder、Decoder 類放在了 Foundation 框架中。
JSON 和 模型的相互轉(zhuǎn)換
蘋果提供了 JSONEncoder 和 JSONDecoder 這兩個(gè)結(jié)構(gòu)體來方便得在 JSON 數(shù)據(jù)和自定義模型之間互相轉(zhuǎn)換。蘋果可以利用一些系統(tǒng)私有的機(jī)制來實(shí)現(xiàn)轉(zhuǎn)換,而不需要通過 OC Runtime 。
只要讓自己的數(shù)據(jù)類型符合 Codable 協(xié)議,就可以用系統(tǒng)提供的編解碼器進(jìn)行編解碼。
struct User: Codable {
var name: String
var age: Int
}解碼(JSON Data -> Model):
let user = JSONDecoder().decode(User.self, from: jsonData)
編碼(Model -> JSON Data):
let jsonData = JSONEncoder().encode(user)
字典 和 模型的相互轉(zhuǎn)換
將模型用JSONEncoder的encode轉(zhuǎn)成Data,然后再用JSONSerialization反序列化成Dictionary對(duì)象。
struct User: Codable {
var name: String?
var age: Int?
static func convertFromDict(dict: NSDictionary) -> User? {
var user: User?
do {
let data = try JSONSerialization.data(withJSONObject: dict, options: [])
let decoder = JSONDecoder()
user = try decoder.decode(User.self, from: data)
} catch {
print(error)
}
return user
}
func convertToDict() -> NSDictionary? {
var dict: NSDictionary?
do {
let encoder = JSONEncoder()
let data = try encoder.encode(self)
dict = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? NSDictionary
} catch {
print(error)
}
return dict
}
}到此這篇關(guān)于Swift使用編解碼庫Codable的文章就介紹到這了,更多相關(guān)Swift編解碼庫Codable內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Swift實(shí)現(xiàn)“或”操作符的3種方法示例
這篇文章主要給大家介紹了關(guān)于Swift實(shí)現(xiàn)“或”操作符的3種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
在Mac OS的終端中運(yùn)行Swift應(yīng)用的方法
這篇文章主要介紹了在Mac OS的終端中運(yùn)行Swift應(yīng)用的方法,依靠Xcode的REPL功能來實(shí)現(xiàn),需要的朋友可以參考下2015-07-07
openstack重啟swift服務(wù)后報(bào)錯(cuò)問題解決方案
這篇文章主要介紹了解決openstack重啟swift服務(wù)后報(bào)錯(cuò),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08
Swift設(shè)計(jì)思想Result<T>與Result<T,?E:?Error>類型解析
這篇文章主要為大家介紹了Swift設(shè)計(jì)思想Result<T>與Result<T,?E:?Error>的類型示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11

