深度解析:为何在 SwiftUI 视图的 init 初始化器里无法更改 @State 的值?

news2024/11/27 16:48:21

在这里插入图片描述



问题现象

如下代码所示,我们希望用 “hopy” 初始化 ContentView 中的 secret 属性,但是最终 ContentView 显示时, secret 的值仍旧为默认值 “none” !

在这里插入图片描述

为什么会出现这种情况呢?

其实答案就在 @State 包装器属性内部实现机制上,它比表面看起来要复杂那么一丢丢。

在本篇博文中,您将收获如下知识:

  • SwiftUI @State 包装器属性的内部实现
  • SwiftUI 如何在不可变结构实例上调用可变方法 update() 更新视图内容
  • 无法在视图 init 构造器里更改 @State 值的真正原因
  • 上述问题的解决之道

无需等待,让我们马上开始旅程吧!

Let’s go!!! 😉



问题分析

1. @State 包装器属性的内部实现

SwiftUI 中大量使用了属性包装器 @propertyWrapper 定义的属性类型,比如说@State,它其实是用 @propertyWrapper 修饰的泛型结构 State<Value>&

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27064.html

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

相关文章

第十四届校模拟赛第一期(一)

“须知少时凌云志&#xff0c;自许人间第一流” 鄙人11月八号有幸参加学校校选拔赛&#xff0c;题型为5道填空题&#xff0c;5道编程题&#xff0c;总时间为4小时。奈何能力有限&#xff0c;只完成了5道填空和3道编程大题&#xff0c;现进行自省自纠&#xff0c;分享学习&#…

Unity | Cinemachine 2D 设置边界及错误记录

1 背景介绍 在使用大地图的项目中&#xff0c;通常需要摄像机跟随玩家移动&#xff0c;而且需要根据地图尺寸限制摄像机的边界 借助 Cinemachine 及其扩展组件 CinemachineConfiner 可以很方便的实现该功能&#xff0c;但这次遇见一个问题&#xff1a;运行时&#xff0c;当摄…

世界杯今日胜负预测(阿根廷VS沙特阿拉伯,丹麦VS突尼斯)

首先是今天开局的两场 阿根廷VS沙特阿拉伯————阿根廷胜 理由&#xff1a; 1、国家队世界男足排名第三 2、在今年阿根廷的近期战绩 3、经常关注世界杯的粉丝观点 4、抖音平台预测数据&#xff0c;截止时间14:46 丹麦VS突尼斯————丹麦胜 理由&#xff1a; 1、丹麦国…

CPT-CY3/CY5/CY7/CY7.5/花菁染料CY3/Y5/CY7/CY7.5/抗Trop-2 IgG抗体偶联顺铂的制备

小编今天给大家分享了CPT-CY3/CY5/CY7/CY7.5/花菁染料CY3/Y5/CY7/CY7.5/抗Trop-2 IgG抗体偶联顺铂的制备方法&#xff0c;一起来看看。 抗Trop-2 IgG抗体偶联顺铂的制备&#xff1a; 转染Trop-2质粒至293F细胞,利用Protein A亲和柱纯化,获得人源抗Trop-2 IgG抗体.酶联免疫吸附…

Qt Quick-PySide2使用qrc文件

Qt Quick中PySide2使用qrc文件、Controls2设置全局样式、VSCode任务。 使用步骤 创建一个 resource.qrc 文件 <RCC><qresource prefix"/"><file>qtquickcontrols2.conf</file><file>images/images.png</file></qresource&…

反射、类的加载时机、类加载过程的详细流程图

目录 一、反射 1、静态加载 2、动态加载 二、类加载的时机 三、类加载的流程图 四、类加载的三个阶段的详细解释 1.1 加载 1.2 连接 1、验证 2、准备 3、解析 1.3 初始化 一、反射 反射机制是java实现动态语言的关键&#xff0c;也就是哦天哪故宫反射实现类动态加载…

Linux安装Oracle19c(极简版)

Oracle下载oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpmoracle-database-ee-19c-1.0-1.x86_64.rpmOracle安装 cd /opt yum -y localinstall oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm yum -y localinstall oracle-database-ee-19c-1.0-1.x86_64.rpm 环境变…

RHCE学习 --- 第八次作业(ansible)

RHCE学习 — 第八次作业&#xff08;ansible&#xff09; \ 一、基础环境&#xff1a; 采用一台centos7的主机为控制节点master&#xff0c;两台centos8的主机为受控节点&#xff08;node01&#xff0c;node02&#xff09; 三台主机均安装ansible并可以使用 三台主机有IP地…

My Sixty-seventh Page - 0-1背包问题理论 - By Nicolas

小尼在这里跟大家说明一下0-1背包问题的理论&#xff0c;首先我们需要认识一下什么是背包问题。小尼在这里拉一下代码随想录的代码&#xff0c;有兴趣的小伙伴也想把背包问题学好&#xff0c;可以去代码随想录看一看背包问题的讲解&#xff0c;也可以去B站看一看代码随想录对背…

java项目-第158期ssm仓库智能仓储系统_java毕业设计_计算机毕业设计

java项目-第158期ssm仓库智能仓储系统_java毕业设计_计算机毕业设计 今天分享的项目是《ssm仓库智能仓储系统》 该项目分为3个角色&#xff0c;管理员、员工、供应商。 员工角色登录后台&#xff0c;主要负责流水线工作&#xff0c;比如&#xff1a;查看供应商、 货物采购管理…

【计算机视觉OpenCV基础】实验一 图像预处理

实验一 图像预处理 计算机视觉OpenCV基础实验合辑&#xff08;实验1234扩展&#xff09; 资源下载地址&#xff1a; https://download.csdn.net/download/weixin_53403301 合辑&#xff1a;&#xff08;加在下载地址后面&#xff09; /87113581 讲义&#xff08;包括理论、图例…

MCE | 分子伴侣介导的自噬

自噬是细胞在外界环境因素的影响下&#xff0c;利用溶酶体&#xff0c;降解自身受损、变性大分子物质或者细胞器的自我消化过程。依据其发生途径&#xff0c;主要分为三种&#xff1a;巨自噬 (Macroautophagy)&#xff0c;微自噬 (Microautophagy) 和分子伴侣介导的自噬 (Chape…

MyBatis 缓存机制

文章目录一、一级缓存二、二级缓存1.cache 元素2.缓存命中率一、一级缓存 MyBatis 的一级缓存是 SqlSession 级别的缓存。如果同一个 SqlSession 对象多次执行完全相同的 SQL 语句&#xff0c;在第一次执行完成后&#xff0c;MyBatis 会将查询结果写入一级缓存中&#xff0c;此…

mysql中的binlog用法

binlog是什么 MySQL的二进制日志binlog可以说是MySQL最重要的日志&#xff0c;它记录了所有的DDL和DML语句&#xff08;除了数据查询语句select&#xff09;,以事件形式记录&#xff0c;还包含语句所执行的消耗的时间&#xff0c;MySQL的二进制日志是事务安全型的。使用mysqlb…

Kotlin语法学习(四)_空指针检查

空指针检查 空指针异常是一种不受编程语言检查的运行时异常,只能由程序员主动通过逻辑判断来避免,所以空指针异常往往比较容易出这个问题 可空类型系统 在Kotlin当中利用了编译时判空检查的机制几乎杜绝了空指针异常,Kotlin提供了一些列的工具,让我们能够轻松处理各种判空情…

Verilog 随机数及概率分布

随机数 Verilog 中使用系统任务 $random(seed) 产生随机数&#xff0c;seed 为随机数种子。seed 值不同&#xff0c;产生的随机数也不同。如果 seed 相同&#xff0c;产生的随机数也是一样的。可以为 seed 赋初值&#xff0c;也可以忽略 seed 选项&#xff0c;seed 默认初始值为…

130. 被围绕的区域

130. 被围绕的区域 给你一个 m∗nm * nm∗n 的矩阵 board &#xff0c;由若干字符 ‘X’ 和 ‘O’ &#xff0c;找到所有被 ‘X’ 围绕的区域&#xff0c;并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 实例1&#xff1a; 输入&#xff1a;board [[“X”,“X”,“X”,“X”],…

内容云筑底,火山引擎能否为企业添一把火?

在App里面再搭一个“今日头条”&#xff0c;让用户在自家的App里看图文、刷视频&#xff0c;这是很多企业都想干的一件事情。尤其是对于用户使用频率低的App而言&#xff0c;他们更需要依靠信息流内容加长用户停留时间&#xff0c;增加用户互动次数&#xff0c;进而留住用户&am…

神经网络和深度学习-梯度下降Gradient Descent

梯度下降 损失函数 绝大多数的机器学习模型都会有一个损失函数。比如常见的均方误差&#xff08;Mean Squared Error)损失函数&#xff1a; L(w,b)1N∑i1N(yi−f(wxib))2L(w, b)\frac{1}{N} \sum_{i1}^{N}\left(y_{i}-f\left(w x_{i}b\right)\right)^{2} L(w,b)N1​i1∑N​(y…

物理层物理层

该层解决具体比特传输问题 一般的数据通信系统如图&#xff1a; 该系统可按通信方式分为两种&#xff1a;同步/异步通信和模拟/数字通信&#xff1a; 异步通信是通信双方各自时钟独立&#xff0c;每次只传输一个字符&#xff0c;时钟在传送开始时对齐&#xff1b;这种机制简单…