欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Swift使用編解碼庫(kù)Codable的過(guò)程詳解

 更新時(shí)間:2023年09月12日 11:06:39   作者:培根芝士  
Codable 是 Swift 引入的全新的編解碼庫(kù),使開(kāi)發(fā)者更方便的解析JSON 或 plist 文件,支持枚舉、結(jié)構(gòu)體和類,這篇文章主要介紹了Swift使用編解碼庫(kù)Codable,需要的朋友可以參考下

Codable 是 Swift 引入的全新的編解碼庫(kù),使開(kāi)發(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 開(kāi)始引入,包含了 Encoder 和 Decoder 協(xié)議和他們的兩個(gè)實(shí)現(xiàn) JSONEncoder、JSONDecoder 和 PropertyListEncoder、PropertyListDecoder。

其中 Codable 及其相關(guān)協(xié)議放在了標(biāo)準(zhǔn)庫(kù)中,而具體的 Encoder、Decoder 類放在了 Foundation 框架中。 

JSON 和 模型的相互轉(zhuǎn)換

蘋果提供了  JSONEncoder  和  JSONDecoder  這兩個(gè)結(jié)構(gòu)體來(lái)方便得在 JSON 數(shù)據(jù)和自定義模型之間互相轉(zhuǎn)換。蘋果可以利用一些系統(tǒng)私有的機(jī)制來(lái)實(shí)現(xiàn)轉(zhuǎn)換,而不需要通過(guò)  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使用編解碼庫(kù)Codable的文章就介紹到這了,更多相關(guān)Swift編解碼庫(kù)Codable內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Swift 結(jié)構(gòu)體

    詳解Swift 結(jié)構(gòu)體

    這篇文章主要介紹了Swift 結(jié)構(gòu)體的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-09-09
  • 詳解Swift中enum枚舉類型的用法

    詳解Swift中enum枚舉類型的用法

    Swift中通過(guò)enum關(guān)鍵字可以直接創(chuàng)建出枚舉對(duì)象,而且可以使用switch和case語(yǔ)句來(lái)進(jìn)行流程控制,十分強(qiáng)大和靈活,這里我們就來(lái)詳解Swift中enum枚舉類型的用法
    2016-06-06
  • iOS Swift UICollectionView橫向分頁(yè)滾動(dòng),cell左右排版問(wèn)題詳解

    iOS Swift UICollectionView橫向分頁(yè)滾動(dòng),cell左右排版問(wèn)題詳解

    UICollectionView是iOS中比較常見(jiàn)的一個(gè)控件,這篇文章主要給大家介紹了關(guān)于iOS Swift UICollectionView橫向分頁(yè)滾動(dòng),cell左右排版問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • swift自定義表格控件(UITableView)

    swift自定義表格控件(UITableView)

    這篇文章主要為大家詳細(xì)介紹了swift自定義表格控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Swift自定義UITableViewCell背景色

    Swift自定義UITableViewCell背景色

    這篇文章主要為大家詳細(xì)介紹了Swift自定義UITableViewCell背景色,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 使用Swift實(shí)現(xiàn)iOScollectionView廣告無(wú)限滾動(dòng)效果(DEMO)

    使用Swift實(shí)現(xiàn)iOScollectionView廣告無(wú)限滾動(dòng)效果(DEMO)

    本文給大家分享使用Swift實(shí)現(xiàn)iOScollectionView廣告無(wú)限滾動(dòng)效果(DEMO),非常不錯(cuò),具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-11-11
  • swift3.0鍵盤彈起遮擋輸入框問(wèn)題的解決方案

    swift3.0鍵盤彈起遮擋輸入框問(wèn)題的解決方案

    這篇文章主要介紹了swift3.0鍵盤彈起遮擋輸入框問(wèn)題的解決方案,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • Swift編程中的初始化與反初始化完全講解

    Swift編程中的初始化與反初始化完全講解

    這篇文章主要介紹了Swift編程中的初始化與反初始化完全講解,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • Swift操作Quartz 2D進(jìn)行簡(jiǎn)單的繪圖與坐標(biāo)變換的教程

    Swift操作Quartz 2D進(jìn)行簡(jiǎn)單的繪圖與坐標(biāo)變換的教程

    這篇文章主要介紹了Swift操作Quartz 2D進(jìn)行簡(jiǎn)單的繪圖與坐標(biāo)變換的教程,Quartz 2D是Core Graphics框架中的一個(gè)重要組件,經(jīng)常被Mac OS或和iOS開(kāi)發(fā)者用來(lái)繪圖,需要的朋友可以參考下
    2016-04-04
  • Swift利用CoreData如何存儲(chǔ)多種數(shù)據(jù)類的通訊錄

    Swift利用CoreData如何存儲(chǔ)多種數(shù)據(jù)類的通訊錄

    這篇文章主要給大家介紹了關(guān)于Swift利用CoreData如何存儲(chǔ)多種數(shù)據(jù)類的通訊錄的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12

最新評(píng)論