日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Swift 中 User Defaults 的讀取和寫入

來源: 責編: 時間:2023-11-03 17:07:46 588觀看
導讀前言User Defaults 是 Swift 應用程序存儲在應用啟動之間保持的首選項的首選解決方案。它是由屬性列表(plist)文件支持的鍵-值存儲。由于這種類型的支持存儲,你需要了解支持的存儲類型。在使用 User Defaults 時有一些最

SlE28資訊網——每日最新資訊28at.com

前言

User Defaults 是 Swift 應用程序存儲在應用啟動之間保持的首選項的首選解決方案。它是由屬性列表(plist)文件支持的鍵-值存儲。由于這種類型的支持存儲,你需要了解支持的存儲類型。SlE28資訊網——每日最新資訊28at.com

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

介紹 User Defaults

應用程序通常使用 User Defaults 來存儲用戶的首選項。你可以存儲首選項,例如用戶最喜歡的股票或保存特定用戶狀態,例如“用戶已看到引導”。SlE28資訊網——每日最新資訊28at.com

存儲這些首選項的代碼可以如下所示:SlE28資訊網——每日最新資訊28at.com

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

在這種情況下,我們使用了標準 User Defaults 容器。在大多數情況下,這將足夠。但是,你可能希望考慮使用組 User Defaults 。SlE28資訊網——每日最新資訊28at.com

共享 User Defaults

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

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

要配置應用組,你需要向項目設置中添加一個新的功能:SlE28資訊網——每日最新資訊28at.com

SlE28資訊網——每日最新資訊28at.com

你可以通過添加應用組功能來開始與其他應用程序和擴展共享 User Defaults。SlE28資訊網——每日最新資訊28at.com

你可以在蘋果的文檔中找到詳細的說明。配置后,你可以使用組標識符創建新實例:SlE28資訊網——每日最新資訊28at.com

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

現在,你可以通過使用靜態屬性來訪問共享的組容器:SlE28資訊網——每日最新資訊28at.com

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

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

User Defaults 存儲數據類型

屬性列表必須支持你存儲在 User Defaults 中的對象。只要你嘗試寫入不受支持的對象,你將立即遇到以下錯誤:SlE28資訊網——每日最新資訊28at.com

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

在這種情況下,我試圖存儲一個可編碼的對象:SlE28資訊網——每日最新資訊28at.com

struct Stock: Decodable {    let symbol: String}UserDefaults.group.set(Stock(symbol: "AAPL"), forKey: "last-opened-stock")

每當你遇到此類異常時,你必須在存儲數據之前將數據轉換。你可以使用 JSONEncoder 將實例編碼為數據,并在讀取值時解碼它。SlE28資訊網——每日最新資訊28at.com

User Defaults 支持以下類型:SlE28資訊網——每日最新資訊28at.com

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

如果你的類型不在此列表中,你需要找到一種將其轉換為任何受支持類型的方法。SlE28資訊網——每日最新資訊28at.com

響應更改

盡管你可以使用 didChangeNotification 來觀察更改,但我建議查看類似于 User Defaults Property Wrapper 的托管解決方案,用于實時監視更改。SlE28資訊網——每日最新資訊28at.com

監控 User Defaults 更改

在處理與 User Defaults 互動的功能時,你希望有一種實時監視更改的方法。為解決這個問題,我在 RocketSim 中構建了一個 User Defaults 編輯器,允許你實時編輯和監視鍵-值對。SlE28資訊網——每日最新資訊28at.com

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

RocketSim 的 User Defaults 編輯器允許你實時編輯和查看 User Defaults 值。SlE28資訊網——每日最新資訊28at.com

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

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

覆蓋User Defaults 設置

出于調試目的覆蓋User Defaults 設置SlE28資訊網——每日最新資訊28at.com

雖然使用 RocketSim 有助于實現最佳更改和調試,但你可能希望在調試過程中使用方案設置來覆蓋User Defaults 設置。SlE28資訊網——每日最新資訊28at.com

考慮的替代方案

在大多數情況下,User Defaults 是一個很好的解決方案,但如果你存儲敏感數據或希望跨設備訪問數據,你可能希望探索其他解決方案。SlE28資訊網——每日最新資訊28at.com

Keychain 用于安全性

User Defaults 不足以存儲敏感數據。用戶憑據、API 密鑰或其他敏感數據應存儲在鑰匙串中。SlE28資訊網——每日最新資訊28at.com

用于跨平臺的 CloudKit

如果希望首選項可以從安裝了你的應用程序的其他 Apple 設備訪問,請考慮使用 NSUbiquitousKeyValueStore。它是一個類似的鍵-值存儲,但使用 iCloud 作為支持存儲。SlE28資訊網——每日最新資訊28at.com

結論

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

本文鏈接:http://www.www897cc.com/showinfo-26-16866-0.htmlSwift 中 User Defaults 的讀取和寫入

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 使用 SwiftUI 創建一個靈活的選擇器

下一篇: 深入淺出RabbitMQ:順序消費、死信隊列和延時隊列

標簽:
  • 熱門焦點
  • 對標蘋果的靈動島 華為帶來實況窗功能

    繼蘋果的靈動島之后,華為也在今天正式推出了“實況窗”功能。據今天鴻蒙OS 4.0的現場演示顯示,華為的實況窗可以更高效的展現出實時通知,比如鎖屏上就能看到外賣、打車、銀行
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • 得物效率前端微應用推進過程與思考

    一、背景效率工程隨著業務的發展,組織規模的擴大,越來越多的企業開始意識到協作效率對于企業團隊的重要性,甚至是決定其在某個行業競爭中突圍的關鍵,是企業長久生存的根本。得物
  • 共享單車的故事講到哪了?

    來源丨海克財經與共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對“勢”的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • 華為發布HarmonyOS 4:更好玩、更流暢、更安全

    在8月4日的華為開發者大會2023(HDC.Together)大會上,HarmonyOS 4正式發布。自2019年發布以來,HarmonyOS一直以用戶為中心,經歷四年多的發展HarmonyOS已
  • 首發天璣9200+ iQOO Neo8系列發布首銷售價2299元起

    2023年5月23日晚,iQOO Neo8系列正式發布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro強悍登場,限時售價3099元起;價位段最強性能手機iQOO Neo8同期上市
  • OPPO K11搭載高性能石墨散熱系統:旗艦同款 性能涼爽釋放

    日前OPPO官方宣布,將于7月25日14:30舉辦新品發布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣點就是將配備索尼
  • 上海舉辦人工智能大會活動,建設人工智能新高地

    人工智能大會在上海浦江兩岸隆重拉開帷幕,人工智能新技術、新產品、新應用、新理念集中亮相。8月30日晚,作為大會的特色活動之一的上海人工智能發展盛典人工
Top 主站蜘蛛池模板: 北京市| 从化市| 崇明县| 富源县| 浦江县| 武城县| 华安县| 余庆县| 榕江县| 电白县| 七台河市| 文水县| 余江县| 房产| 蒲江县| 静海县| 宜宾县| 东阳市| 丽江市| 洪泽县| 花莲市| 固镇县| 库车县| 磐石市| 犍为县| 柳江县| 忻州市| 诸暨市| 霍林郭勒市| 郁南县| 进贤县| 贵港市| 嵊州市| 喀喇沁旗| 香港 | 治县。| 桦南县| 平潭县| 肃北| 观塘区| 榆林市|