swiftUI结构体数组修改属性UI没更新

news2024/9/19 23:41:19

SwiftUI使用了值语义,即当数组的值发生更改时,SwiftUI无法检测到具体的更改操作。

要解决这个问题,可以使用SwiftUI中的@State属性包装器来创建一个可观察的状态变量。当数组发生更改时,通过更改状态变量的值来触发列表的更新,但是这种改变仅仅是指数组append一个结构体或remove一个结构体时,页面会增加或减少一个元素

以下场景UI不会更新:

结构体数组直接定义为View的一个@State属性,且结构体遵循了Hashable或Equatable协议并且实现了==静态函数来标识结构体的唯一性

当点击“修改结构体属性”时,页面1就改变了一次颜色,后面一直点击都不改变颜色,说明修改结体数组中某个结构体属性无法更新UI

解决办案:

方案一:去掉结构体的Hashable或Equatable或

static func == (lhs: SettingModel, rhs: SettingModel) -> Bool {

        return lhs.id == rhs.id

    }这个静态函数,去掉了就能更新UI

方案二:如果有些函数要求结构体必须遵循Hashable或Equatable协议,那就用另外一种方式,再单独定义一个Class类型的ViewModel,遵循ObservableObject协议,并将结构体数组定义为@Published类型,然后在View中定义@StateObject类型的viewModel,通过viewModel来引用结构体数组

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

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

相关文章

ASCII、Unicode、UCS-2、UTF-8互转编码原理

基础 ASCII (American Standard Code for Information Interchange),1967年 GB2312 是中华人民共和国国家汉字信息交换用编码,国家标准总局发布,1981年5月1日实施,对应的国标标准号:GB/T 2312-1980 Unicode 1990年开始研发,1994年发布初版…

【聊聊AI编程必不可少的NLTK及其punkt、punkt_tab安装】

聊聊AI编程必不可少的NLTK及其punkt、punkt_tab安装 前言一、NLTK是什么?二、安装NLTK1.通过cmd安装:2.通过conda安装: 三.下载NLTK Data数据包1.官网下载2.Github下载3.Gitee下载3.1 下载并安装nltk_data3.2 下载并安装punkt_tab 4. nltk_da…

开展文化创新与传承 全球老子圣像评选启动

9月11日,在刚见证了中华社会文化发展基金会老子文化公益基金成立发布会盛典的中华文化园,又迎来了中华社会文化发展基金会领导的亲临指导。本次指导由中华社会文化发展基金会执行副秘书长蒋晔带队,魏欣主任和高凯主任同行,共同考察…

RNN发展(RNN/LSTM/GRU/GNMT/transformer/RWKV)

RNN到GRU参考: https://blog.csdn.net/weixin_36378508/article/details/115101779 tRANSFORMERS参考: seq2seq到attention到transformer理解 GNMT 2016年9月 谷歌,基于神经网络的翻译系统(GNMT),并宣称GNMT在多个主…

3D培训大师,化工企业安全教育与应急演练的新助力

化工企业的生产安全培训,作为保障员工生命安全与企业稳定运营的基石,其重要性不言而喻。传统的培训方式内容僵化、形式单一缺乏互动、效果难以评估,越来越不适应化工企业的实际需求。因此,探索和应用更为高效、创新的培训工具&…

【Qt】实现顶部导航栏自适应滑动效果

需求: 顶部导航栏有若干选项,可能很多,顶部区域不能完全展示,比如10个选项,界面一次只能展示五个,那么要求把后面的选项隐藏起来,并且,当点击第四个第五个按钮的时候,自…

软件工程进度管理

答案:A D 解析: 由选项可以看出,有B,E,C,K,这里选择经过它们路径最长的就是正确答案 选项B 路线 ABIJL362819 路线 ABDIJL3522820 选项E 路线 AEGJL432817 路线 AEGHKL4334317 选项C 路线 ACFHKL5314316 选项D 路线 A…

【GBase 8c V5_3.0.0 分布式数据库常用维护命令】

一、查看数据库状态/检查(gbase用户) 1.gha_ctl monitor 使用gha_ctl monitor查看节点运行情况(跟dcs的地址和端口) gha_ctl monitor -c gbase -l http://172.20.10.8:2379 -Hall |coordinator | datanode | gtm | server|dcs:必选字段。指定查看哪类集…

Prometheus优化指南:如何提升系统性能

Prometheus 是一个强大的开源监控系统,它被广泛应用于云原生环境中,特别是在 Kubernetes 和其他容器化基础设施中。然而,随着监控数据量的增长,系统本身的性能可能会成为瓶颈。如果不进行优化,最终将影响到整体系统的可…

浏览器查消息

window.addEventListener(message,function(event){console.log(Received message,event.data)}); 并把弹窗口对准要接收消息的ifrme 发消息的窗口

大模型入门3:理解LLAMA

Model a stack of DecoderBlocks(SelfAttention, FeedForward, and RMSNorm) decoder block 整体结构:最大的区别在pre-norm x -> norm(x) -> attention() -> residual connect -> norm() -> ffn -> residual connect class DecoderBlock(nn.…

从零到一:构建你的第一个AI项目(实战教程)

引言 欢迎来到AI世界的初学者指南!在这个实战教程中,我们将一步步构建一个基础的AI项目,让你从零开始,亲手体验人工智能的魅力。我们的目标是让即使没有任何编程或AI背景的你,也能通过本教程完成一个小型的AI应用。今天…

《程序猿之设计模式实战 · 装饰者模式》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

Python 求亲和数

亲和数(Amicable Numbers)是指两个不同的正整数,它们的真因数(即除去本身的所有因数)之和与对方的数相等。 def sum_of_proper_divisors(n):"""计算一个数的真因子之和"""divisors_su…

SpringBoot闲一品交易平台

SpringBoot闲一品交易平台 #vue项目实战 #计算机项目 #java项目 SpringBoot闲一品交易平台通过运用软件工程原理和开发方法,借助Spring Boot框架,旨在实现零食交易信息的高效管理,提升用户的购物体验和满意度。 技术栈 开发语言:…

用于安全研究的 Elastic Container Project

作者:来自 Elastic Andrew Pease•Colson Wilhoit•Derek Ditch 使用 Docker 启动 Elastic Stack 序言 Elastic Stack 是一个模块化数据分析生态系统。虽然这允许工程灵活性,但建立开发实例进行测试可能很麻烦。建立 Elastic Stack 的最简单方法是使用…

Day09-StatefuleSet控制器

Day09-StatefuleSet控制器 0、昨日内容回顾1、StatefulSets控制器1.1 StatefulSet概述1.2 StatefulSets控制器-网络唯一标识之headless1.3 StatefulSets控制器-独享存储 2、metric-server2.1 metric-server概述2.2 部署metric-server:2.3 hpa案例 3、helm概述3.1 安装helm3.2 h…

RabbitMQ 高级特性——持久化

文章目录 前言持久化交换机持久化队列持久化消息持久化 前言 前面我们学习了 RabbitMQ 的高级特性——消息确认,消息确认可以保证消息传输过程的稳定性,但是在保证了消息传输过程的稳定性之后,还存在着其他的问题,我们都知道消息…

【rpg像素角色】俯视角-行走动画

制作像素角色的俯视角行走动画并不像看上去那么复杂,尤其是在你已经完成了角色的4个方向站立姿势之后(其中左右方向可以通过水平翻转实现)。接下来,我会一步步为你讲解如何制作行走动画。 1. 理解行走规律 在制作行走动画之前&am…

Spring Boot集成Akka Stream快速入门Demo

1.什么是Akka Stream? Akka Streams是一个用于处理和传输元素序列的库。它建立在Akka Actors之上,使流的摄入和处理变得简单。由于它是建立在Akka Actors之上的,它为Akka现有的actor模型提供了一个更高层次的抽象。Akka流由3个主要部分组成-…