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

Swift 中 User Defaults 的讀取和寫入

開發 前端
在使用 User Defaults 時有一些最佳實踐。我還可以根據在數十個應用程序中使用它的實施經驗,推薦特定的解決方案。讓我們深入研究一下!

前言

User Defaults 是 Swift 應用程序存儲在應用啟動之間保持的首選項的首選解決方案。它是由屬性列表(plist)文件支持的鍵-值存儲。由于這種類型的支持存儲,你需要了解支持的存儲類型。

在使用 User Defaults 時有一些最佳實踐。我還可以根據在數十個應用程序中使用它的實施經驗,推薦特定的解決方案。讓我們深入研究一下!

介紹 User Defaults

應用程序通常使用 User Defaults 來存儲用戶的首選項。你可以存儲首選項,例如用戶最喜歡的股票或保存特定用戶狀態,例如“用戶已看到引導”。

存儲這些首選項的代碼可以如下所示:

UserDefaults.standard.set(true, forKey: "has-seen-onboarding")
UserDefaults.standard.set(["AAPL", "TSLA"], forKey: "favorite-stocks")

print(UserDefaults.standard.bool(forKey: "has-seen-onboarding")) 
// 打印:true
print(UserDefaults.standard.array(forKey: "favorite-stocks")) 
// 打印:["AAPL", "TSLA"]

在這種情況下,我們使用了標準 User Defaults 容器。在大多數情況下,這將足夠。但是,你可能希望考慮使用組 User Defaults 。

共享 User Defaults

與其他應用程序和擴展共享 User Defaults

使用所謂的應用組,你可以與其他應用程序和擴展共享 User Defaults 容器。我強烈建議從一開始就使用這種技術,即使現在可能沒有共享首選項的需要,但如果你添加需要從主應用程序中讀取或寫入首選項的擴展,以后你會感謝自己的。

要配置應用組,你需要向項目設置中添加一個新的功能:

你可以通過添加應用組功能來開始與其他應用程序和擴展共享 User Defaults。

你可以在蘋果的文檔中找到詳細的說明。配置后,你可以使用組標識符創建新實例:

extension UserDefaults {
    static let group = UserDefaults(suiteName: "group.your.identifier")
}

現在,你可以通過使用靜態屬性來訪問共享的組容器:

UserDefaults.group.set(["AAPL", "TSLA"], forKey: "favorite-stocks")

任何使用相同應用組的應用程序或擴展現在都可以讀取和寫入最喜歡的股票。我在 Stock Analyzer 中使用此技術,根據主應用程序中配置的最喜歡的股票填充小部件。

User Defaults 存儲數據類型

屬性列表必須支持你存儲在 User Defaults 中的對象。只要你嘗試寫入不受支持的對象,你將立即遇到以下錯誤:

*** Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘Attempt to insert non-property list object UserDefaults.Stock(symbol: “AAPL”) for key last-opened-stock’

在這種情況下,我試圖存儲一個可編碼的對象:

struct Stock: Decodable {
    let symbol: String
}

UserDefaults.group.set(Stock(symbol: "AAPL"), forKey: "last-opened-stock")

每當你遇到此類異常時,你必須在存儲數據之前將數據轉換。你可以使用 JSONEncoder 將實例編碼為數據,并在讀取值時解碼它。

User Defaults 支持以下類型:

  • 數據
  • 字符串
  • 數字(NSNumber)
  • 日期
  • 數組
  • 字典
  • 布爾值

如果你的類型不在此列表中,你需要找到一種將其轉換為任何受支持類型的方法。

響應更改

盡管你可以使用 didChangeNotification 來觀察更改,但我建議查看類似于 User Defaults Property Wrapper 的托管解決方案,用于實時監視更改。

監控 User Defaults 更改

在處理與 User Defaults 互動的功能時,你希望有一種實時監視更改的方法。為解決這個問題,我在 RocketSim 中構建了一個 User Defaults 編輯器,允許你實時編輯和監視鍵-值對。

例如,我在以下視頻中正在開發 WeTransfer 應用程序中顯示的工具提示。工具提示應該每位用戶只顯示一次,我希望確保 User Defaults 鍵 hasShownUploadFilesTooltip 相應地更新。你可以通過單擊執行按鈕并選擇 User Defaults  plist 文件來打開編輯器。

RocketSim 的 User Defaults 編輯器允許你實時編輯和查看 User Defaults 值。

編輯器不斷監視值,當值更改時會閃爍藍色背景顏色。與此同時,我可以使用開關重置該值,并使用 RocketSim 重新啟動應用程序,以查看工具提示是否再次顯示。

你可以想象這大大加快了測試依賴于 User Defaults 的實施的工作流程。最好的是你可以免費開始并使用標準套件測試編輯器,只需從 Mac App Store 安裝 RocketSim 即可。

覆蓋User Defaults 設置

出于調試目的覆蓋User Defaults 設置

雖然使用 RocketSim 有助于實現最佳更改和調試,但你可能希望在調試過程中使用方案設置來覆蓋User Defaults 設置。

考慮的替代方案

在大多數情況下,User Defaults 是一個很好的解決方案,但如果你存儲敏感數據或希望跨設備訪問數據,你可能希望探索其他解決方案。

Keychain 用于安全性

User Defaults 不足以存儲敏感數據。用戶憑據、API 密鑰或其他敏感數據應存儲在鑰匙串中。

用于跨平臺的 CloudKit

如果希望首選項可以從安裝了你的應用程序的其他 Apple 設備訪問,請考慮使用 NSUbiquitousKeyValueStore。它是一個類似的鍵-值存儲,但使用 iCloud 作為支持存儲。

結論

你可以使用 User Defaults 存儲首選項并在應用啟動之間捕獲狀態。應用組非常適合與其他應用程序和擴展共享首選項,你需要密切關注可以存儲的數據類型。通過監視支持存儲,你將確保沒有意外存儲的數據。當需要跨設備訪問數據或需要存儲敏感數據時,最好查看替代解決方案。

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

2023-01-15 17:11:44

Rust

2010-06-07 09:26:32

Hadoop集群

2024-12-03 00:40:55

2021-05-14 07:15:23

UsertpUser工具

2025-03-19 09:02:18

Debouncing任務讓步Swift

2022-04-06 09:10:03

抽象類型普通類型Swift

2021-08-02 15:02:37

Go Excelize 開發

2024-06-25 09:08:24

.NETCSV文件

2023-10-31 12:59:00

C++編程語言

2024-03-04 09:58:39

??:valid????:invalidCSS

2015-03-16 10:33:14

Swift指針

2015-07-08 16:43:02

Configurati

2015-11-23 10:07:19

Swift模式匹配

2015-01-21 16:25:29

Swift指針

2023-10-12 08:01:00

2021-12-22 15:13:03

iOS 15Swift二進制

2022-05-11 09:01:54

Swift類型系統幻象類型

2022-07-04 08:54:39

Swift處理器項目

2011-08-03 17:38:30

iPhone NSUserDefa 自定義

2009-10-13 16:46:17

vmware_user
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 7777奇米影视| 国产精品mv在线观看 | 国产高清一区二区三区 | 久久久久久色 | 91色视频在线观看 | 成人乱人乱一区二区三区软件 | 澳门永久av免费网站 | 成人在线免费 | 99久久婷婷国产综合精品电影 | 久久亚洲一区二区 | 国产成人高清在线观看 | h在线看| 老外黄色一级片 | 中文字幕在线看 | 成人午夜精品 | 91精品国产91久久久久久最新 | 一区二区在线 | 黄色av免费网站 | 国产观看 | 热re99久久精品国99热观看 | 国产精品久久国产精品久久 | 亚州精品天堂中文字幕 | 欧美精品一区三区 | 国产精品久久久久一区二区三区 | 国产资源在线视频 | 久久久久资源 | 99成人在线视频 | 日日操夜夜操天天操 | 欧美精品中文字幕久久二区 | 久久久精 | 天天爽综合网 | 国产精品一区二区福利视频 | 亚洲精品一区二区网址 | 北条麻妃视频在线观看 | 日韩视频观看 | 免费视频一区二区三区在线观看 | 国产精品美女久久久久久久久久久 | 国产一区二区精品在线观看 | 成人不卡 | 中文字幕一区二区三区四区五区 | 视频一二区 |