欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來(lái)到入門教程網(wǎng)!

Swift

當(dāng)前位置:主頁(yè) > 軟件編程 > Swift >

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

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-11|欄目:Swift|點(diǎn)擊: 次

前言

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

Codable 最常見的使用場(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ì)我們的支持。

上一篇:swift 4自定義UITableCell的方法示例

欄    目:Swift

下一篇:Swift中的限定擴(kuò)展詳析

本文標(biāo)題:關(guān)于Swift 4.1中的Codable改進(jìn)詳解

本文地址:http://mengdiqiu.com.cn/a1/Swift/11946.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有