成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 Codable 歸檔 Swift 對(duì)象

開發(fā) 前端
UserDefaults非常適合存儲(chǔ)簡(jiǎn)單的設(shè)置,例如整數(shù)和布爾值,但是當(dāng)涉及復(fù)雜數(shù)據(jù)時(shí)——例如自定義Swift類型——我們需要做更多的工作。

[[412119]]

UserDefaults非常適合存儲(chǔ)簡(jiǎn)單的設(shè)置,例如整數(shù)和布爾值,但是當(dāng)涉及復(fù)雜數(shù)據(jù)時(shí)——例如自定義Swift類型——我們需要做更多的工作。

我們可以使用以下簡(jiǎn)單的User數(shù)據(jù)結(jié)構(gòu):

  1. struct User { 
  2.     var firstName: String 
  3.     var lastName: String 

它有兩個(gè)字符串,但并不特殊——它們只是一段文本。整數(shù),布爾值(真或假)和Double也是如此。這些值的數(shù)組和字典也很容易想到:一個(gè)字符串,然后是另一個(gè),然后是第三個(gè),依此類推。

當(dāng)使用這樣的數(shù)據(jù)時(shí),Swift為我們提供了一個(gè)很棒的協(xié)議,稱為Codable:一種專門用于存檔和取消存檔數(shù)據(jù)的協(xié)議,這是一種“將對(duì)象轉(zhuǎn)換為純文本然后再次轉(zhuǎn)換”的奇特方式。

我們將在未來的項(xiàng)目中更多地研究Codable,但是目前我們的需求很簡(jiǎn)單:我們想要?dú)w檔一個(gè)自定義類型,以便可以將其放入U(xiǎn)serDefaults中,然后在從UserDefaults中返回時(shí)將其取消存檔。

當(dāng)使用僅具有簡(jiǎn)單屬性的類型(字符串,整數(shù),布爾值,字符串?dāng)?shù)組等)時(shí),支持歸檔和取消歸檔的唯一需要做的就是向Codable添加一致性,如下所示:

  1. struct User: Codable { 
  2.     var firstName: String 
  3.     var lastName: String 

Swift將自動(dòng)為我們生成一些代碼,這些代碼將根據(jù)需要為我們存檔和取消存檔User實(shí)例,但是我們?nèi)匀恍枰嬖VSwift何時(shí)存檔以及如何處理數(shù)據(jù)。

該過程的這一部分由稱為JSONEncoder的新類型提供支持。它的工作是獲取符合Codable的內(nèi)容,然后以 JavaScript Object Notation(JSON)的形式發(fā)送回該對(duì)象。該名稱暗示它特定于JavaScript,但實(shí)際上,我們都使用它,因?yàn)樗侨绱说目焖俸秃?jiǎn)單。

Codable協(xié)議不需要我們使用JSON,實(shí)際上可以使用其他格式,但這是迄今為止最常見的格式。在這種情況下,我們實(shí)際上并不在乎使用哪種數(shù)據(jù),因?yàn)樗鼈冎粫?huì)存儲(chǔ)在UserDefaults中。

要將用戶數(shù)據(jù)轉(zhuǎn)換為JSON數(shù)據(jù),我們需要在JSONEncoder上調(diào)用encode()方法。這可能會(huì)引發(fā)錯(cuò)誤,因此應(yīng)使用try或try?進(jìn)行調(diào)用來整齊地處理錯(cuò)誤。例如,如果我們有一個(gè)屬性來存儲(chǔ)User實(shí)例,如下所示:

  1. @State private var user = User(firstName: "Taylor", lastName: "Swift"

然后,我們可以創(chuàng)建一個(gè)將用戶存檔的按鈕,并將其保存到UserDefaults中,如下所示:

  1. Button("Save User") { 
  2.     let encoder = JSONEncoder() 
  3.  
  4.     if let data = try? encoder.encode(self.user) { 
  5.         UserDefaults.standard.set(data, forKey: "UserData"
  6.     } 

該數(shù)據(jù)常量是一種新的數(shù)據(jù)類型,可能會(huì)讓人感到困惑。它旨在存儲(chǔ)您可以想到的任何類型的數(shù)據(jù),例如字符串,圖像,zip文件等。不過,在這里,我們只關(guān)心它是可以直接寫入U(xiǎn)serDefaults中的數(shù)據(jù)類型之一。

當(dāng)我們返回另一種方式時(shí)(當(dāng)我們擁有JSON數(shù)據(jù)并且想要將其轉(zhuǎn)換為Swift Codable類型時(shí)),我們應(yīng)該使用JSONDecoder而不是JSONEncoder,但是過程大致相同。

這使我們進(jìn)入了項(xiàng)目概述的末尾,因此繼續(xù)進(jìn)行,將您的項(xiàng)目重置為其初始狀態(tài),以便進(jìn)行構(gòu)建。

本文轉(zhuǎn)載自微信公眾號(hào)「Swift社區(qū)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Swift社區(qū)公眾號(hào)。

 

責(zé)任編輯:姜華 來源: Swift社區(qū)
相關(guān)推薦

2011-08-11 17:15:54

iPhone歸檔

2012-07-12 16:00:32

OpenStackSwift架構(gòu)

2021-10-22 14:23:02

logrotateLinux 命令Linux

2010-04-02 15:25:40

云歸檔

2017-09-25 14:22:26

Swift4.0正式發(fā)布添加歸檔

2015-01-21 16:25:29

Swift指針

2015-03-16 10:33:14

Swift指針

2011-08-02 11:16:08

Oracle數(shù)據(jù)庫(kù)歸檔日志

2025-06-12 00:00:00

對(duì)象存儲(chǔ)多站點(diǎn)

2022-08-10 09:02:08

SwiftDecodable

2014-07-02 09:47:06

SwiftCocoaPods

2015-08-27 09:46:09

swiftAFNetworkin

2013-07-25 09:12:48

OpenStackSwift對(duì)象存儲(chǔ)對(duì)象存儲(chǔ)

2015-08-27 09:46:02

開源對(duì)象存儲(chǔ)Swift

2015-08-25 11:17:13

OpenStack對(duì)象存儲(chǔ)Swift

2022-04-10 12:24:50

LinuxArk歸檔工具

2025-06-04 08:04:26

2011-08-01 13:28:09

Oracle歸檔模式非歸檔模式

2009-09-23 10:14:10

Hibernate使用

2019-11-11 14:09:17

Swift數(shù)據(jù)科學(xué)語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品久久国产精品 | 香蕉婷婷 | 一级a性色生活片久久毛片 一级特黄a大片 | 色婷婷亚洲一区二区三区 | 国产成人精品久久久 | 日韩电影一区二区三区 | 久久久精品一区二区三区 | av大片在线观看 | 在线国产小视频 | 久久久久久久久国产精品 | 久久久久资源 | 国产特级毛片aaaaaa | 久久亚洲精品国产精品紫薇 | a亚洲精品 | 日韩视频一级 | 亚洲欧美中文字幕在线观看 | 午夜小影院 | 精品国产欧美一区二区三区成人 | 国产1区2区3区| 欧美一级久久 | 成人在线精品视频 | 伊人无码高清 | 日韩免费av网站 | 亚洲精品欧美一区二区三区 | 北条麻妃一区二区三区在线观看 | 欧美高清一区 | 美女在线视频一区二区三区 | 久热久热| 国产欧美在线观看 | 久久精品国产免费看久久精品 | 成人影音| 91麻豆精品国产91久久久更新资源速度超快 | 999久久久久久久久6666 | 黄色片视频网站 | a黄视频 | 亚洲高清在线 | 男女网站免费 | 国产黄色在线观看 | 亚洲国产精品一区 | 国产人成精品一区二区三 | 欧美一区精品 |