当前位置: 首页 > news >正文

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.lryc.cn/news/356256.html

相关文章:

  • iCloud 照片到 Android 指南:帮助您快速将照片从 iCloud 传输到安卓手机
  • 知识点总结
  • Python并发与异步编程
  • 动态内存管理—C语言通讯录
  • 美光EMMC芯片丝印型号查询 8LK17/D9PSK, OXA17/JY997
  • win32-鼠标消息、键盘消息、计时器消息、菜单资源
  • springboot项目部署到linux服务器
  • MagicLens:新一代图像搜索技术和产品形态
  • [9] CUDA性能测量与错误处理
  • Java学习四
  • Vue 父组件使用refs来直接访问和修改子组件的属性或调用子组件的方法
  • 范罗士、希喂、安德迈爆款宠物空气净化器哪款好?深度对比测评
  • SAP OBYC自动记账 详解
  • 《NoSQL数据库技术与应用》 MongoDB副本集
  • Flutter 中的 DropdownButtonFormField 小部件:全面指南
  • 哈希算法教程(个人总结版)
  • Nocobase快速上手 -第一个collection
  • 吴恩达2022机器学习专项课程C2W2:2.19 sigmoid函数的替代方案 2.20如何选择激活函数 2.21 激活函数的重要性
  • 循序渐进Docker Compose
  • 怎样查看JavaScript中没有输出结果的数组值?
  • 强化学习学习笔记-李宏毅
  • 吴恩达深度学习笔记:超 参 数 调 试 、 Batch 正 则 化 和 程 序 框 架(Hyperparameter tuning)3.8-3.9
  • SQL 语言:数据控制
  • 『ZJUBCA Weekly Feed 07』MEV | AO超并行计算机 | Eigen layer AVS生态
  • 正点原子延时函数delay_ms延时失效的原因
  • MySQL 满足条件函数中使用查询最大值函数
  • Java | Leetcode Java题解之第101题对称二叉树
  • 【区块链】智能合约漏洞测试
  • 大模型主流 RAG 框架TOP10
  • 第八次javaweb作业