一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Swift - 關于Swift 4.1中的Codable改進詳解

關于Swift 4.1中的Codable改進詳解

2021-01-10 15:46BigNerdCoding Swift

這篇文章主要給大家介紹了關于Swift 4.1中的Codable改進的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。

前言

Apple 在 Swift 4.0 中作了很多的改進,其中我個人最喜歡的就是 Codable 協議的出現。它讓 Swift 自帶了 JSON 、 XML 結構化數據和 Model 的映射和轉換能力。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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 的默認實現無法將蛇形變量名映射到對應的駝峰屬性上。所以在 Swift 4.0 中我們需要對 Mac 進行部分改造:

?
1
2
3
4
5
6
7
8
9
10
11
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 對此作出了改進。現在我們可以通過設置 JSONDecoder 的 keyDecodingStrategy 就能實現不同編程規范之間解碼操作了。與之對應,JSONEncoder 也有一個 keyEncodingStrategy 屬性用于不同編程規范之間的編碼操作。所以上訴代碼可以簡化為:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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)
}

如果你想進行反向轉換操作的話,代碼也非常簡單:

?
1
2
3
let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
let encoded = try encoder.encode(macs)

當然,我們還可以對轉換策略進行自定義實現以其實現一些特定需求。具體的使用方式可以參照代碼

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://bignerdcoding.com/archives/61.html

延伸 · 閱讀

精彩推薦
  • Swiftswift where與匹配模式的實例詳解

    swift where與匹配模式的實例詳解

    這篇文章主要介紹了swift where與匹配模式的實例詳解的相關資料,這里附有簡單的示例代碼,講的比較清楚,需要的朋友可以參考下...

    追到夢的魔術師14382021-01-06
  • SwiftSwift使用CollectionView實現廣告欄滑動效果

    Swift使用CollectionView實現廣告欄滑動效果

    這篇文章主要為大家詳細介紹了Swift使用CollectionView實現廣告欄滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Stevin的技術博客12372021-01-13
  • SwiftSwift能代替Objective-C嗎?

    Swift能代替Objective-C嗎?

    這是我在網上上看到的答案,復制粘貼過來和大家分享一下,因為我和很多人一樣很關心Swift的出現對Mac開發的影響和對Objective-C的影響。...

    Swift教程網4412020-12-16
  • Swiftmac git xcrun error active developer path 錯誤

    mac git xcrun error active developer path 錯誤

    本文主要是講訴了如何解決在mac下使用git;xcode4.6的環境時,出現了錯誤(mac git xcrun error active developer path)的解決辦法,希望對大家有所幫助...

    Swift教程網2232020-12-16
  • SwiftSwift的74個常用內置函數介紹

    Swift的74個常用內置函數介紹

    這篇文章主要介紹了Swift的74個常用內置函數介紹,這篇文章列舉出了所有的Swift庫函數,內置函數是指無需引入任何模塊即可以直接使用的函數,需要的朋友可...

    Swift教程網5802020-12-19
  • SwiftSwift教程之基礎數據類型詳解

    Swift教程之基礎數據類型詳解

    這篇文章主要介紹了Swift教程之基礎數據類型詳解,本文詳細講解了Swift中的基本數據類型和基本語法,例如常量和變量、注釋、分號、整數、數值類型轉換等...

    Swift教程網5162020-12-18
  • SwiftSwift實現多個TableView側滑與切換效果

    Swift實現多個TableView側滑與切換效果

    這篇文章主要為大家詳細介紹了Swift實現多個TableView側滑與切換效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    乞力馬扎羅的雪雪5822021-01-08
  • SwiftSwift中轉義閉包示例詳解

    Swift中轉義閉包示例詳解

    在Swift 中的閉包類似于結構塊,并可以在任何地方調用,下面這篇文章主要給大家介紹了關于Swift中轉義閉包的相關資料,需要的朋友可以參考下...

    小小小_小朋友11412021-12-26
主站蜘蛛池模板: 香蕉久久夜色精品国产小优 | 1919gogo女厕盗摄| 国产伦精品一区二区 | 扒开双腿疯狂进出爽爽动态图 | 国产亚洲欧美日韩综合综合二区 | 亚洲乱码一二三四区国产 | asianfemdom冷柔女王 | 日韩大片免费看 | 天天综合色网 | 操一操影院| xxx美国 | 99视频九九精品视频在线观看 | 奇米777狠狠 | 精品无码一区二区三区中文字幕 | 九九热只有精品 | 暖暖高清日本在线 | 视频在线观看高清免费看 | 本土自拍 | 亚洲区视频在线观看 | 国产一卡2卡3卡四卡精品网 | 成人二区 | 欧美在线观看视频一区 | 5278欧美一区二区三区 | 国内精品免费一区二区三区 | 香蕉97超级碰碰碰免费公 | 99视频全部免费 | 糖心在线观看 | 亚洲高清中文字幕精品不卡 | 精品一区二区三区中文 | 久久午夜一区二区 | 免费理伦片高清在线 | 日本欧美大码a在线视频播放 | 边吃胸边膜下刺激免费男对女 | 法国女佣系列在线播放 | 欧美成人第一页 | 玩两个少妇女邻居 | 欧美高清在线 | 久9视频这里只有精品123 | 欧美日韩一区二区综合 | 啊哈~嗯哼~用力cao我小说 | 国模丰满美女冰漪34d |