SwiftUI中AppStorage的介绍使用

news2024/11/26 6:55:55

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.coloradmin.cn/o/1708905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CC1310 Debug interface is locked

XDS110连接CC1310板子,打开Smart RF 弹出窗口如下: 解决办法: 1 打开SmartRF Flash Programmer 2 选择连接的设备CC1310, 弹出如下窗口,点击OK。 3 点击Tools图标,选择CC26XX/CC13XX Forced Mass Erase。 4 在弹出的…

骆驼大赛

目录 一,主版图 二,骰子 三,初始设置 四,核心规则 五,结算 这是适合5-8人玩的一个概率推理类的回合制桌游。 一,主版图 赛道由16个格子组成,编号为1-16。 一共7个骆驼,其中正…

就说说Java初学者求职准备项目的正确方式

当下不少Java初学者也知道求职时项目的重要程度,但在简历上写项目和准备面试项目时,真有可能走弯路,这样的话,加重学习负担还是小事,还真有可能导致无法入职。 1 对于在校生和应届生来说,你去跑通个学习项…

四川汇聚荣聚荣科技有限公司好不好?

在当今科技飞速发展的时代,企业要想在激烈的市场竞争中脱颖而出,必须具备强大的技术实力和良好的市场口碑。那么,作为一家专注于科技创新的公司,四川汇聚荣聚荣科技有限公司究竟如何呢?接下来,我们将从四个方面进行详…

探索Python列表的奥秘:从零开始学习

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、列表简介与用途 二、列表的创建与访问 三、列表的增删改查 四、列表生成式与高级操作…

信创加持 YashanDB通过商用密码产品认证

近期,深算院自主研发的“YashanDB V23”成功获得由国家密码管理局商用密码检测中心颁发的《商用密码产品认证证书》,通过GM/T 0028《密码模块安全技术要求》安全等级第二级认证。这标志着YashanDB密码技术和密码管理领域达到了国家标准,能够全…

股民用脚投票 退退退!

倒计时2天,看来今年首只非ST类要退市的股票诞生了。 继上周五封S跌停后,今天正源(股份)再度被股民用脚投票一字跌停, 这已经连续第18个交易日股价低于1块钱了。 按照退市新规,连续20个交易日股价低于1元是…

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(九)

本系列课程,将重点讲解Phpsploit-Framework框架软件的基础使用! 本文章仅提供学习,切勿将其用于不法手段! 继续接上一篇文章内容,讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 现在,我们…

信息标记形式 (XML, JSON, YAML)

文章目录 🖥️介绍🖥️三种形式🏷️XML (Extensible Markup Language)🔖规范🔖注释🔖举例🔖其他 🏷️JSON (JavaScript Object Notation)🔖规范🔖注释&#x…

机器之心 | 清华接手,YOLOv10问世:性能大幅提升,登上GitHub热榜

本文来源公众号“机器之心”,仅用于学术分享,侵权删,干货满满。 原文链接:清华接手,YOLOv10问世:性能大幅提升,登上GitHub热榜 相同性能情况下,延迟减少 46%,参数减少 2…

知识产权与标准化

知识产权与标准化 导航 文章目录 知识产权与标准化导航一、知识产权概述二、保护范围与对象三、保护期限四、知识产权归属五、侵权判定六、标准的分类 一、知识产权概述 知识产权:知识产权是指人们就其智力劳动成果所依法享有的专有权利,通常是国家赋予创造者对其…

SNP数据转型解析:云服务在现代企业数字化转型的必要性

为什么当今的企业想为数字化工作环境做好准备并保持竞争力,很难避免使用云服务呢? 要理解为什么企业没有云的替代选择,我们需要了解云服务的含义 - 它不仅仅指存储数据的另一个位置。各种云模型提供了极大的灵活性,可以根据需要操…

149.二叉树:二叉树的前序遍历(力扣)

代码解决 这段代码实现了二叉树的前序遍历,前序遍历的顺序是:访问根节点 -> 递归遍历左子树 -> 递归遍历右子树。以下是详细解释,包括各个部分的注释: // 二叉树节点的定义 struct TreeNode {int val; // 节…

栈的特性及代码实现(C语言)

目录 栈的定义 栈的结构选取 链式储存结构和顺序栈储存结构的差异 栈的代码实现 "stack.h" "stack.c" 总结 栈的定义 栈:栈是限定仅在表尾进行插入和删除操作的线性表。 我们把运行插入的和删除的一段叫做栈顶(TOP&#xff…

坦克飞机大战项目详解:从包结构到测试发布

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、项目初始化与包结构构建 代码案例: 二、资源文件与配置文件管理 代码案例…

Clickhouse 嵌套数据类型总结—— Clickhouse 基础篇(三)

文章目录 创建嵌套类型的表插入读取数据在嵌套类型上使用数组函数 在 clickhouse 中存储嵌套类型的关键字是 Nested, 只支持一级嵌套。数据结构类似于在数据结构类似于在表的单元格里面嵌套“一张表格”,如下图所示: 嵌套类型是列存储,本质…

rv1126 imx307修改驱动使能图像垂直反转180度

查看imx307芯片手册 修改,3007地址的bit0为1 修改imx307驱动代码加入这一句代码,直接写死,这样拍出来的照片就使垂直翻转180度的了 // SPDX-License-Identifier: GPL-2.0 /** imx307 driver** Copyright (C) 2020 Rockchip Electronics Co.…

Elasticsearch 认证模拟题 - 1

1、题目 定义一个数据流,满足 data-stream_*_*,数据首先分布在 data_hot,5分钟后移动到 data_warm,3分钟后到 data_cold,再过 8 分钟删除。 1.1 考点 生命周期索引模板数据流 1.2 答案 # 修改生命周期策略修改时间…

SpringBoot整合RabbitMQ的快速使用教程

目录 一、引入依赖 二、配置rabbitmq的连接信息等 1、生产者配置 2、消费者配置 三、设置消息转换器 四、生产者代码示例 1、配置交换机和队列信息 2、生产消息代码 五、消费者代码示例 1、消费层代码 2、业务层代码 在分布式系统中,消息队列是一种重要…

RTOS(6)任务

重点: 一、FreeRtos任务的API调用 1.创建任务(静态、动态创建) 动态创建: ①先写任务函数 ②定义函数的handle指针 ③调用动态创建任务的API:xTaskCreate(任务函数,任务名称,栈深度&#x…