最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift使用編解碼庫Codable的過程詳解

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

Codable 是 Swift 引入的全新的編解碼庫,使開發(fā)者更方便的解析JSON 或 plist 文件。支持枚舉、結構體和類。

Codable協(xié)議定義

Codable代表一個同時符合 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é)議和他們的兩個實現(xiàn) JSONEncoder、JSONDecoder 和 PropertyListEncoder、PropertyListDecoder。

其中 Codable 及其相關協(xié)議放在了標準庫中,而具體的 Encoder、Decoder 類放在了 Foundation 框架中。 

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

蘋果提供了  JSONEncoder  和  JSONDecoder  這兩個結構體來方便得在 JSON 數(shù)據(jù)和自定義模型之間互相轉(zhuǎn)換。蘋果可以利用一些系統(tǒng)私有的機制來實現(xiàn)轉(zhuǎn)換,而不需要通過  OC Runtime

只要讓自己的數(shù)據(jù)類型符合 Codable 協(xié)議,就可以用系統(tǒng)提供的編解碼器進行編解碼。

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對象。

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
    }
}

到此這篇關于Swift使用編解碼庫Codable的文章就介紹到這了,更多相關Swift編解碼庫Codable內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Swift 結構體

    詳解Swift 結構體

    這篇文章主要介紹了Swift 結構體的相關資料,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-09-09
  • SwiftUI自定義導航的方法實例

    SwiftUI自定義導航的方法實例

    導航是我們平時經(jīng)常會遇到的一個需求,下面這篇文章主要給大家介紹了關于SwiftUI自定義導航的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • Swift實現(xiàn)“或”操作符的3種方法示例

    Swift實現(xiàn)“或”操作符的3種方法示例

    這篇文章主要給大家介紹了關于Swift實現(xiàn)“或”操作符的3種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • 在Mac OS的終端中運行Swift應用的方法

    在Mac OS的終端中運行Swift應用的方法

    這篇文章主要介紹了在Mac OS的終端中運行Swift應用的方法,依靠Xcode的REPL功能來實現(xiàn),需要的朋友可以參考下
    2015-07-07
  • openstack重啟swift服務后報錯問題解決方案

    openstack重啟swift服務后報錯問題解決方案

    這篇文章主要介紹了解決openstack重啟swift服務后報錯,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • RxSwift學習教程之基礎篇

    RxSwift學習教程之基礎篇

    RxSwift是Swift函數(shù)響應式編程的一個開源庫,由Github的ReactiveX組織開發(fā),維護。下面這篇文章主要給大家介紹了關于RxSwift學習之基礎篇的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • Swift實現(xiàn)代碼混淆詳解

    Swift實現(xiàn)代碼混淆詳解

    本文詳細講解了Swift實現(xiàn)代碼混淆的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>
    2021-11-11
  • 在?Swift?中編寫Git?Hooks腳本的方法

    在?Swift?中編寫Git?Hooks腳本的方法

    在本例中,我使用了?commit-msg?鉤子,它能夠在當前提交信息生效前修改此信息,鉤子由一個參數(shù)調(diào)用,該參數(shù)是指向包含用戶輸入的提交消息的文件的路徑,這意味著,為了改變提交消息,我們只需要從文件中讀取、修改其內(nèi)容,然后寫回調(diào)用掛鉤的文件
    2022-06-06
  • Switch語句的技巧

    Switch語句的技巧

    switch語句對一個表達式求值,將結果與 case 子語句比較,如果匹配,則從 case 處的語句向下執(zhí)行,本文給大家介紹Switch語句的技巧,需要的朋友參考下吧
    2016-02-02
  • Swift設計思想Result<T>與Result<T,?E:?Error>類型解析

    Swift設計思想Result<T>與Result<T,?E:?Error>類型解析

    這篇文章主要為大家介紹了Swift設計思想Result<T>與Result<T,?E:?Error>的類型示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11

最新評論

略阳县| 彭阳县| 沂水县| 铜梁县| 多伦县| 博客| 和静县| 苏尼特右旗| 宝山区| 无为县| 乌拉特后旗| 漯河市| 新邵县| 华安县| 佛坪县| 建阳市| 兴仁县| 通城县| 探索| 昌宁县| 阳信县| 扶风县| 垣曲县| 临沂市| 化隆| 上虞市| 抚州市| 新邵县| 隆子县| 乌兰察布市| 宁河县| 阳原县| 瑞金市| 于都县| 德州市| 日土县| 德兴市| 滁州市| 缙云县| 丽水市| 灌南县|