SwiftUI中AppStorage的介紹使用

Swift中,AppStorageSwiftUI中引入的一個屬性包裝器,在這之前我們要存儲一些輕量級的數據采用UserDefaults進行存取。而AppStorage用于從UserDefaults中讀取值,當值改變時,它會自動重新調用視圖的body屬性。也就是說,這個AppStorage包裝器有效地監視UserDefaults中的鍵值,并在鍵值更改時刷新UI。

下面先看一個在SwiftUI中使用UserDefaults存儲的示例:
在這里插入圖片描述
App第一運行時,沒有顯示userName,當點擊SAVE后,userName賦值,并通過UserDefaults存起來。
當App第二個運行,在onAppear方法中,讀取UserDefaults存取的userName值,賦值給userName屬性并在UI上顯示。

struct AppStorageDemo: View {@State var userName: String?var body: some View {VStack(spacing: 30) {if let userName {Text(userName).font(.title)}Button(action: {userName = "Daniel"UserDefaults.standard.setValue(userName, forKey: "userName")}, label: {Text("SAVE").foregroundColor(.white).padding().background(Color.red).clipShape(Capsule())})}.onAppear {userName = UserDefaults.standard.string(forKey: "userName")}}
}

下面采用AppStorage包裝器替換掉UserDefaults的存儲邏輯。
在這里插入圖片描述
上面代碼采用AppStorage包裝器包裝userName屬性,并在括號內設置了要監聽的key值,這表明userName變量的值要通過這個key在UserDefaults存儲。

@AppStorage("userName") var userName: String?

userName賦值,則將值直接存儲到UserDefaults中。
讀取userName的值,也是拿對應的key去UserDefaults取值。

上面修改后的代碼在App運行起來后,顯示出了userName的值,這說明AppStorage包裝器在UserDefaults通過userName這個key讀取到了對應的值。

在文章開頭說的被AppStorage包裝器包裝的屬性,在其改變的時候,UI會自動刷新,下面看一下下面的示例:
在這里插入圖片描述
通過兩個Button切換userName的值,UI也及時的刷新了,通過再次啟動App,顯示也是上一次存儲的值。

以上就是AppStorage包裝器的簡單介紹與使用,如有不對的地方,還望大家批評指正。

最后,希望能夠幫助到有需要的朋友,如果您覺得有幫助,還望點個贊,添加個關注,筆者也會不斷地努力,寫出更多更好用的文章。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18137.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18137.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18137.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

React@16.x(11)ref

目錄 1,介紹1.1,得到的結果 2,參數類型2.1,字符串(不再推薦)2.2,對象2.3,函數函數調用時機 3,注意點 1,介紹 reference 引用。和 vue 中的 refs 類似&#x…

IEC60870-5-104通信規約 | 報文解析 | 組織報文與解析報文(C++)

文章目錄 一、IEC60870-5-104通信規約1.IEC104的報文結構2.IEC104的報文格式--I/U/S格式2.1 I幀2.2 U幀2.3 S幀 3.應用服務數據單元ASDU 二、IEC60870-5-104規約通信過程報文幀解析三、組織報文與解析報文(C) 一、IEC60870-5-104通信規約 IEC60870-5-104…

golang 守護進程管理

添加守護進程 vim /etc/systemd/system/xxx.service [Unit] DescriptionGo Socket Service Afternetwork.target[Service] Typesimple ExecStart/data/quwan/quwan_ws WorkingDirectory/data/quwan # 停止前發送信號 ExecStop/bin/kill -SIGTERM $MAINPID # 如果超過20s 進程…

筆記-Python lambda

在學習python的過程中,lambda的語法時常會使人感到困惑,lambda是什么,為什么要使用lambda,是不是必須使用lambda? 下面就上面的問題進行一下解答。 1、lambda是什么? 看個例子: 1 g lambda…

什么是GPT-4o,推薦GPT-4o的獲取使用方法,使用GPT4o模型的最新方法教程(2024年5月16更新)

2024年5月最新GPT-4o模型使用教程和簡介 2024年5月最新GPT-4o模型使用教程和簡介 2024 年 5 月 13 日,openai 發布了最新的模型 GPT4o。 很多同學還不知道如何訪問GPT-4、GPT-4 Turbo和GPT-4o等模型,這篇文章介紹如何在ChatGPT中訪問GPT-4o&#xff0…

milvus索引

Milvus是一個開源的向量數據庫引擎,旨在支持大規模向量相似度搜索和分析。索引在Milvus中扮演著非常重要的角色,它們用于加速向量數據的檢索。下面詳細介紹一下Milvus中的索引: 1. 索引類型 Milvus支持多種索引類型,每種類型都適…

無人機偵察:雷達系統概述

一、雷達基本原理 無人機偵察中的雷達系統主要基于無線電波的傳播和反射原理。雷達發射機產生特定頻率的電磁波,并通過天線以定向波束形式向空間發射。當這些電磁波遇到目標時,部分能量會被反射回來,被雷達接收機捕獲。通過測量發射和接收電…

基于SpringBoot+Vue+Redis+Mybatis的商城購物系統 【系統實現+系統源碼+答辯PPT】

前言 該系統采用SpringBootVue前后端分離開發,前端是一個單獨的項目,后端是一個單獨的項目。 ??技術棧:SpringBootVueMybatisRedisMysql ??開發工具:IDEA、Vscode ??瀏覽器:Chrome ??開發環境:JDK1…

Pytorch 筆記

執行下面這段代碼后,為什么返回的是 2 ? vector torch.tensor([7, 7]) vector.shape為什么返回的是 torch.Size([2])? 當你創建一個PyTorch張量時,它會記住張量中元素的數量和每個維度的大小。在你的代碼中,torch.t…

通過 js 調起微信官方的微信支付api

通過 js 調起微信官方的微信支付api function onBridgeReady() {WeixinJSBridge.invoke(getBrandWCPayRequest, { "appId": "wx2421b1c4370ec43b", // 公眾號ID,由商戶傳入 "timeStamp": "1395712654", // 時間戳&quo…

動態插入HTML內容有哪些常見用法

動態插入HTML內容的常見用法包括但不限于以下幾種情況: 用戶交互反饋:當用戶在網頁上進行某些操作時(如點擊按鈕、提交表單等),可以使用JavaScript動態插入HTML內容來提供即時的反饋或結果。例如,當用戶點…

vue3第三十五節(TS 之 泛型)

本節介紹 ts 中泛型的常用情景 1 什么是泛型 泛型的本質是參數化類型&#xff0c;也就是說所操作的數據類型被指定為一個參數。這種參數類型可以用在類、接口和方法的創建中&#xff0c;分別稱為泛型類、泛型接口、泛型方法。 泛型使用<T>來定義類型&#xff0c;<T…

使用canarytokens進行入侵檢測

canarytokens 基本概念 canarytokens是一種用于識別網絡入侵的工具。它們是一種虛擬的“蜜罐”&#xff0c;可以在網絡上放置&#xff0c;當有人嘗試訪問它們時&#xff0c;可以立即觸發警報&#xff0c;以便及時發現潛在的安全威脅。這些token可以是各種形式&#xff0c;可以…

項目管理基礎知識

項目管理基礎知識 導航 文章目錄 項目管理基礎知識導航一、項目相關概念二、時間管理三、人員管理四、風險管理 一、項目相關概念 項目定義的三層意思 一定的資源約束:時間資源、經費資源、人力資源一定的目標一次性任務 里程碑 是項目中的重要時點或事件持續時間為零&…

深度神經網絡——什么是遷移學習?

1.概述 在練習機器學習時&#xff0c;訓練模型可能需要很長時間。從頭開始創建模型架構、訓練模型&#xff0c;然后調整模型需要大量的時間和精力。訓練機器學習模型的一種更有效的方法是使用已經定義的架構&#xff0c;可能具有已經計算出的權重。這是背后的主要思想 遷移學習…

makefile一些特殊且常用的符號

$^&#xff1a;表示所有的依賴文件列表&#xff0c;多個文件以空格分隔。 $&#xff1a;表示目標文件的名稱。 $<&#xff1a;表示第一個依賴文件的名稱。 $*&#xff1a;表示目標文件的主文件名&#xff08;不包括擴展名&#xff09;。 $?&#xff1a;表示所有比目標文件更…

前端面試題日常練-day26 【面試題】

題目 希望這些選擇題能夠幫助您進行前端面試的準備&#xff0c;答案在文末。 1. Vue中&#xff0c;以下哪個選項可以用于在組件之間傳遞數據&#xff1f; a) props b) emit c) model d) data 2. 在Vue中&#xff0c;以下哪個指令可以用于條件性地渲染一個元素&#xff1f; …

【Python設計模式10】外觀模式

外觀模式&#xff08;Facade Pattern&#xff09;是一種結構型設計模式&#xff0c;它通過提供一個統一的接口&#xff0c;來簡化客戶端與復雜系統之間的交互。外觀模式為子系統中的一組接口提供一個高層接口&#xff0c;使得子系統更容易使用。 外觀模式的結構 外觀模式主要…

【學習心得】超簡單的加載模型和保存模型的方法

方法一&#xff1a;pickle庫 這是Python的標準序列化模塊&#xff0c;可以將幾乎任何Python對象轉化為字節流&#xff08;即序列化&#xff09;&#xff0c;然后可以將其存儲到文件中或通過網絡發送。之后&#xff0c;可以使用pickle再次加載這個字節流&#xff0c;恢復原始對象…

Linux shell命令

cat 文件名 查看文件內容&#xff0c; tac文件名 倒著顯示。 more 文件名 顯示內容 less文件名 和more的功能一樣&#xff0c;按上下左右鍵&#xff0c;按Q鍵結束。 head文件名&#xff0c;只顯示前10行內容。 ln是一個默認創建硬鏈接的命令 ln 文件名 ls -i文件名…