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

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

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.kler.cn/a/304775.html

相关文章:

  • 24/11/12 算法笔记<强化学习> Policy Gradient策略梯度
  • stringUtils详细解释
  • 笔记 | image may have poor performance,or fail,if run via emulation
  • Toeplitz矩阵循环矩阵
  • 【MATLAB代码】二维平面上的TDOA,使用加权最小二乘法,不限制锚点数量,代码可复制粘贴
  • ODOO学习笔记(3):Odoo和Django的区别是什么?
  • Go协程及并发锁应用指南
  • 深入理解Go语言的方法定义与使用
  • 深入理解Go语言中的接口定义与使用
  • 『功能项目』战士职业平A怪物掉血【44】
  • SVM——支持向量机的学习入门
  • 【运维监控】influxdb 2.0+grafana 监控java 虚拟机以及方法耗时情况(完整版)
  • GPS/LBS/Wi-Fi定位,全安排!—合宙Air201资产定位模组LuatOS快速入门04
  • Leetcode 每日一题:Decode String
  • LVS-DR
  • JMeter测试工具的简单了解
  • java和kotlin 可以同时运行吗
  • 高性能微服务架构:Spring Boot 集成 gRPC 实现用户与订单服务即时交互
  • SpringBoot2:web开发常用功能实现及原理解析-整合EasyExcel实现Excel导入导出功能
  • 数据结构修炼——顺序表和链表的OJ题练习
  • C++ string类
  • k8s以及prometheus
  • 树莓派交叉编译
  • 【Web】URI和URL的介绍
  • STM32CubeIDE关于printf()串口输出重定向的问题
  • 『功能项目』项目优化 - 框架加载资源【41】