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

使用 Codable 歸檔 Swift 對象

開發 前端
UserDefaults非常適合存儲簡單的設置,例如整數和布爾值,但是當涉及復雜數據時——例如自定義Swift類型——我們需要做更多的工作。

[[412119]]

UserDefaults非常適合存儲簡單的設置,例如整數和布爾值,但是當涉及復雜數據時——例如自定義Swift類型——我們需要做更多的工作。

我們可以使用以下簡單的User數據結構:

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

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

當使用這樣的數據時,Swift為我們提供了一個很棒的協議,稱為Codable:一種專門用于存檔和取消存檔數據的協議,這是一種“將對象轉換為純文本然后再次轉換”的奇特方式。

我們將在未來的項目中更多地研究Codable,但是目前我們的需求很簡單:我們想要歸檔一個自定義類型,以便可以將其放入UserDefaults中,然后在從UserDefaults中返回時將其取消存檔。

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

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

Swift將自動為我們生成一些代碼,這些代碼將根據需要為我們存檔和取消存檔User實例,但是我們仍然需要告訴Swift何時存檔以及如何處理數據。

該過程的這一部分由稱為JSONEncoder的新類型提供支持。它的工作是獲取符合Codable的內容,然后以 JavaScript Object Notation(JSON)的形式發送回該對象。該名稱暗示它特定于JavaScript,但實際上,我們都使用它,因為它是如此的快速和簡單。

Codable協議不需要我們使用JSON,實際上可以使用其他格式,但這是迄今為止最常見的格式。在這種情況下,我們實際上并不在乎使用哪種數據,因為它們只會存儲在UserDefaults中。

要將用戶數據轉換為JSON數據,我們需要在JSONEncoder上調用encode()方法。這可能會引發錯誤,因此應使用try或try?進行調用來整齊地處理錯誤。例如,如果我們有一個屬性來存儲User實例,如下所示:

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

然后,我們可以創建一個將用戶存檔的按鈕,并將其保存到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.     } 

該數據常量是一種新的數據類型,可能會讓人感到困惑。它旨在存儲您可以想到的任何類型的數據,例如字符串,圖像,zip文件等。不過,在這里,我們只關心它是可以直接寫入UserDefaults中的數據類型之一。

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

這使我們進入了項目概述的末尾,因此繼續進行,將您的項目重置為其初始狀態,以便進行構建。

本文轉載自微信公眾號「Swift社區」,可以通過以下二維碼關注。轉載本文請聯系Swift社區公眾號。

 

責任編輯:姜華 來源: Swift社區
相關推薦

2011-08-11 17:15:54

iPhone歸檔

2012-07-12 16:00:32

OpenStackSwift架構

2021-10-22 14:23:02

logrotateLinux 命令Linux

2010-04-02 15:25:40

云歸檔

2017-09-25 14:22:26

Swift4.0正式發布添加歸檔

2015-01-21 16:25:29

Swift指針

2015-03-16 10:33:14

Swift指針

2011-08-02 11:16:08

Oracle數據庫歸檔日志

2025-06-12 00:00:00

對象存儲多站點

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對象存儲對象存儲

2015-08-25 11:17:13

OpenStack對象存儲Swift

2015-08-27 09:46:02

開源對象存儲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使用

2011-05-18 13:44:31

MySQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美日韩在线 | 成人区精品一区二区婷婷 | 伊人超碰 | 影音先锋中文字幕在线观看 | 黄网免费 | 一区二区中文字幕 | 亚洲一区二区三区在线视频 | 亚洲一区二区在线视频 | 亚洲国产二区 | 国产麻豆一区二区三区 | 97起碰| 欧美日韩一区二区在线 | 一级黄色片一级黄色片 | 久久久免费 | 久久伊人精品 | 国产欧美二区 | 一级一片在线观看 | 91精品国产手机 | 国产精品99久久久久久大便 | 在线啊v | 91网站在线观看视频 | 欧美日韩在线一区二区 | 国产精品一区二区视频 | 欧美亚洲日本 | 99re国产视频 | www.久久精品视频 | 中文在线一区二区 | 欧美激情在线观看一区二区三区 | 日本成人福利 | 国产精品日日做人人爱 | 久久在线视频 | 羞羞视频在线观看 | 国产三级精品三级在线观看四季网 | 粉嫩av久久一区二区三区 | 欧美在线观看网站 | 99久久中文字幕三级久久日本 | 国产精品日韩一区二区 | 激情一区二区三区 | 久久天堂 | 成年人国产在线观看 | 91国内精精品久久久久久婷婷 |