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

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

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

前言

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

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

上訴代碼并不能完成理想的解碼操作,因?yàn)?Codable 的默認(rèn)實(shí)現(xiàn)無(wú)法將蛇形變量名映射到對(duì)應(yīng)的駝峰屬性上。所以在 Swift 4.0 中我們需要對(duì) 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 對(duì)此作出了改進(jìn)?,F(xiàn)在我們可以通過(guò)設(shè)置 JSONDecoder 的 keyDecodingStrategy 就能實(shí)現(xiàn)不同編程規(guī)范之間解碼操作了。與之對(duì)應(yīng),JSONEncoder 也有一個(gè) keyEncodingStrategy 屬性用于不同編程規(guī)范之間的編碼操作。所以上訴代碼可以簡(jiǎ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()
decoder.keyDecodingStrategy = .convertFromSnakeCase

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

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

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

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

總結(jié)

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

相關(guān)文章

  • Swift中使用可選類(lèi)型完美解決占位問(wèn)題

    Swift中使用可選類(lèi)型完美解決占位問(wèn)題

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

    Swift中的限定擴(kuò)展詳析

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

    如何刪掉編程中的?Switch?語(yǔ)句

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

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

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

    Swift教程之枚舉類(lèi)型詳解

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

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

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

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

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

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

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

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

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

    Swift中的常量和變量簡(jiǎn)單概述

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

最新評(píng)論