亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關(guān)于Swift 4.1中的Codable改進(jìn)詳解

 更新時間:2018年02月25日 09:58:01   作者:BigNerdCoding  
這篇文章主要給大家介紹了關(guān)于Swift 4.1中的Codable改進(jìn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

Apple 在 Swift 4.0 中作了很多的改進(jìn),其中我個人最喜歡的就是 Codable 協(xié)議的出現(xiàn)。它讓 Swift 自帶了 JSON 、 XML 結(jié)構(gòu)化數(shù)據(jù)和 Model 的映射和轉(zhuǎn)換能力。

Codable 最常見的使用場景就是:APP 發(fā)起網(wǎng)絡(luò)請求,然后我們將服務(wù)端響應(yīng)的 JSON 數(shù)據(jù)轉(zhuǎn)換為對應(yīng)的 Model 實體。由于服務(wù)端的編程規(guī)范可能與客戶端存在差異, Codable 默認(rèn)數(shù)據(jù)轉(zhuǎn)換實現(xiàn)可能不再適用。例如,服務(wù)端可能使用的蛇形命名方式而客戶端使用的是駝峰。此時我們就需要在客戶端自己動手實現(xiàn)映射關(guān)系。

struct Mac: Codable {
 var name: String
 var screenSize: Int
 var cpuCount: Int
}

let jsonString = """
[
 {
 "name": "MacBook Pro",
  "screen_size": 15,
  "cpu_count": 4
 },
 {
  "name": "iMac Pro",
  "screen_size": 27,
  "cpu_count": 18
 }
]
"""
let jsonData = Data(jsonString.utf8)
let decoder = JSONDecoder()
do {
 let macs = try decoder.decode([Mac].self, from: jsonData)
 print(macs)
} catch {
 print(error.localizedDescription)
}

上訴代碼并不能完成理想的解碼操作,因為 Codable 的默認(rèn)實現(xiàn)無法將蛇形變量名映射到對應(yīng)的駝峰屬性上。所以在 Swift 4.0 中我們需要對 Mac 進(jìn)行部分改造:

struct Mac: Codable {
 var name: String
 var screenSize: Int
 var cpuCount: Int

 enum CodingKeys : String, CodingKey {
   case name
   case screenSize = "screen_size"
   case cpuCount = "cpu_count"
 }
}

好在 Swift 4.1 對此作出了改進(jìn)?,F(xiàn)在我們可以通過設(shè)置 JSONDecoder 的 keyDecodingStrategy 就能實現(xiàn)不同編程規(guī)范之間解碼操作了。與之對應(yīng),JSONEncoder 也有一個 keyEncodingStrategy 屬性用于不同編程規(guī)范之間的編碼操作。所以上訴代碼可以簡化為:

struct Mac: Codable {
 var name: String
 var screenSize: Int
 var cpuCount: Int
}

let jsonString = """
[
 {
 "name": "MacBook Pro",
  "screen_size": 15,
  "cpu_count": 4
 },
 {
  "name": "iMac Pro",
  "screen_size": 27,
  "cpu_count": 18
 }
]
"""
let jsonData = Data(jsonString.utf8)
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase

do {
 let macs = try decoder.decode([Mac].self, from: jsonData)
 print(macs)
} catch {
 print(error.localizedDescription)
}

如果你想進(jìn)行反向轉(zhuǎn)換操作的話,代碼也非常簡單:

let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
let encoded = try encoder.encode(macs)

當(dāng)然,我們還可以對轉(zhuǎn)換策略進(jìn)行自定義實現(xiàn)以其實現(xiàn)一些特定需求。具體的使用方式可以參照代碼

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Swift中使用可選類型完美解決占位問題

    Swift中使用可選類型完美解決占位問題

    這篇文章主要介紹了Swift中使用可選類型完美解決占位問題,本文講解了為Dictionary增加objectsForKeys函數(shù)、Swift中更簡便的方法、內(nèi)嵌可選類型等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Swift中的限定擴展詳析

    Swift中的限定擴展詳析

    擴展就是向一個已有的類、結(jié)構(gòu)體或枚舉類型添加新功能。下面這篇文章主要給大家介紹了關(guān)于Swift中限定擴展的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2018-03-03
  • 如何刪掉編程中的?Switch?語句

    如何刪掉編程中的?Switch?語句

    多重方法是一種有趣的方式,可以幫你擺脫令人討厭的?switch,這篇文章主要介紹了如何刪掉編程中的?Switch?語句,需要的朋友可以參考下
    2022-09-09
  • Swift 中如何使用 Option Pattern 改善可選項的 API 設(shè)計

    Swift 中如何使用 Option Pattern 改善可選項的 API 設(shè)計

    這篇文章主要介紹了Swift 中如何使用 Option Pattern 改善可選項的 API 設(shè)計,幫助大家更好的進(jìn)行ios開發(fā),感興趣的朋友可以了解下
    2020-10-10
  • Swift教程之枚舉類型詳解

    Swift教程之枚舉類型詳解

    這篇文章主要介紹了Swift教程之枚舉類型詳解,本文講解了枚舉語法、匹配枚舉值與switch語句、關(guān)聯(lián)值、原始值等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • Objective-c代碼如何移植為Swift代碼 Objective-c代碼轉(zhuǎn)移到Swift過程介紹

    Objective-c代碼如何移植為Swift代碼 Objective-c代碼轉(zhuǎn)移到Swift過程介紹

    這篇文章主要介紹了Objective-c代碼如何移植為Swift代碼,Objective-c代碼轉(zhuǎn)移到Swift過程介紹,需要的朋友可以參考下
    2014-07-07
  • Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解

    Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解

    這篇文章主要介紹了Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解,本文詳細(xì)講解了Swift中的基本數(shù)據(jù)類型和基本語法,例如常量和變量、注釋、分號、整數(shù)、數(shù)值類型轉(zhuǎn)換等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • swift實現(xiàn)自定義圓環(huán)進(jìn)度提示效果

    swift實現(xiàn)自定義圓環(huán)進(jìn)度提示效果

    這篇文章主要為大家詳細(xì)介紹了swift實現(xiàn)自定義圓環(huán)進(jìn)度提示效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Swift圖像處理之優(yōu)化照片

    Swift圖像處理之優(yōu)化照片

    Core Image能通過分析圖片的各個屬性,人臉的區(qū)域等進(jìn)行自動優(yōu)化圖片。我們只需要調(diào)用autoAdjustmentFiltersWithOptions這個API方法獲取各個自動增強濾鏡來優(yōu)化圖片即可。不管是人物照片還是風(fēng)景照均可增強效果
    2015-11-11
  • Swift中的常量和變量簡單概述

    Swift中的常量和變量簡單概述

    這篇文章主要介紹了Swift中的常量和變量簡單概述的相關(guān)資料,非常具有參考借鑒價值,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05

最新評論