[SwiftUI 开发] 嵌套的ObservedObject中的更改不会更新UI

 
1. 发生问题的demo

 

业务逻辑代码 

class Address: ObservableObject {@Published var street = "123 Apple Street"@Published var city = "Cupertino"
}class User: ObservableObject {@Published var name = "Tim Cook"@Published var address = Address()
}struct ContentView: View {@ObservedObject var user = User()var body: some View {VStack {Text("Name: \(user.name)")Text("Address: \(user.address.street), \(user.address.city)")Button("Change Address") {user.address.street = "New York"}}}
}

当我有一个嵌套的ObservedObject时,嵌套对象的已发布属性的更改不会更新UI,直到父对象发生变化,才会刷新。

 
2.  修改后的代码


SwiftUI(更准确地说是Combine)只能看到值的变化,因此,它可以看到@Published结构实例的属性值的变化,而不能看到@Published类
如果您希望基于这些嵌套对象的属性值的更改来更新Ul,则使用嵌套对象的结构实例。如果必须使用类实例,请使用另一种机制显式地通知更改。下面是使用struct代替class的NestedObject修改的代码

 业务逻辑代码 

struct Address {var street = "123 Apple Street"var city = "Cupertino"
}class User: ObservableObject {@Published var name = "Tim Cook"@Published var address = Address()
}struct ContentView: View {@ObservedObject var user = User()var body: some View {VStack {Text("Name: \(user.name)")Text("Address: \(user.address.street), \(user.address.city)")Button("Change Address") {user.address.street = "New York"}}}
}

总结一句话,一个对象只需要当前属性@Published就可以了,子类使用struct

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

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

相关文章

解决 Win11 微软拼音输入法下 JetBrains IDE Shift+F6 失效的问题

一、使用旧版微软拼音输入法 1.在任务栏中输入法图标上右键,点击“设置”,或者在系统设置中进入“时间和语言 -> 语言和区域 -> 微软拼音输入法”设置项。 2.点击进入“常规”类别,滚动到页面底部,找到“兼容性 -> 使用…

nacos漏洞小结

Alibaba Nacos是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。致力于帮助发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,可以快速实现动态服务发现、服务配置、服务元数据及流量管理…

我的创作纪念日 第四年 我在人间遭罪,也在人间享乐

回顾 一晃四年过去了,从毕业到现在依旧没有后悔自己当初的选择是工作而不是继续读研。 读研虽然可以给我更高的起点,但破碎的底层建筑和生活压力让我没的选择,毕竟只是一介凡人,而且还是底层出身,环境差,观…

64、哥伦比亚大学:CU-Net-目前脑肿瘤分割的最先进模型

本文已被接受发表在2024年IEEE MLISE会议上(c)2024 IEEE。准确地将脑肿瘤从MRI扫描中分割出来对于制定有效的治疗方案和改善患者预后至关重要。本研究引入了一种新的哥伦比亚大学网络(CU-Net)架构实现,用于使用BraTS 2…

收银系统源码-千呼新零售2.0【移动管理端】

千呼新零售2.0系统是零售行业连锁店一体化收银系统,包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体,线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

如何循环遍历循环中的剩余元素

1、问题背景 给定一段文本,文本中包含多条错误信息,每条错误信息包含行号、错误路径和错误信息。需要从文本中提取出这些错误信息,并以特定的格式输出。 line, Error 12, This is the Error line, Error 34, Another Error line, Error …

【Linux】线程周边002之线程安全

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.Linux线程互斥 1…

每日一题——Python实现PAT乙级1050 螺旋矩阵(举一反三+思想解读+逐步优化)6千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 时间复杂度分析 空间复杂度分析 总结 我要更强 代码解释 时间复杂度 …

小区服务前台小程序的设计

管理员账户功能包括:系统首页,个人中心,住户管理,管理员管理,员工管理,安保管理,安保分配管理,客服聊天管理 微信端账号功能包括:系统首页,公告,…

Mongodb集群中的分布式读写

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第81篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…

互联网摸鱼日报(2024-07-01)

互联网摸鱼日报(2024-07-01) 36氪新闻 最前线 | 孚能科技广州基地投产,年产能30GWh,主推SPS大软包产品 本周双碳大事:800亿元“风光火储”大项目来了;光伏巨头SolarEdge股价骤跌20%;韩国电池厂大火,锂电安…

目标检测算法的优缺点

目标检测算法在计算机视觉领域具有广泛的应用,其优缺点因算法类型和具体实现而有所不同。以下是对一些主流目标检测算法优缺点的概述: 1. 传统目标检测算法 优点: 模型简单:传统目标检测算法通常基于手工设计的特征和分类器&am…

Java进阶学习|Day3.Java集合类(容器),Stream的使用,哈希初接触

java集合类(容器) Java中的集合类主要由Collection和Map这两个接口派生而出,其中Collection接口又派生出三个子接口,分别是Set、List、Queue。所有的Java集合类,都是Set、List、Queue、Map这四个接口的实现类&#xf…

Powershell 简易爬虫,提取种子网站的磁力链接

目录 一. 需求二. 分析2.1 思路分析2.2 技术点 三. 代码四. 效果 一. 需求 ⏹有网站如下所示,先要求从按照关键词搜索到的网页中,提取出所有的磁力链接。 二. 分析 2.1 思路分析 打开网页之后,从网页中先提取出所有的标题相关的url然后再打…

linux驱动部分内容整理

文章目录 Linux驱动概念应用程序调用驱动程序流程驱动模块的加载linux设备号加载和卸载注册新字符设备注册设备节点自动创建设备节点编译编译驱动程序编译应用程序 地址映射ioctrl命令码的解析 并发与竞争原子操作自旋锁信号量互斥体 linux中断DMA映射其它printkmemcpyvolatile…

如何在ubuntu上安装ros-noetic?

如何在ubuntu上安装ros-noetic? 1. 源由2. 快速安装3. ROS学习 1. 源由 围绕ros-noetic这个系统,前面已经有不少谈及: Linux 35.5 JetPack v5.1.3ros-noetic安装Linux 35.5 JetPack v5.1.3Fast-Planner编译安装Linux 35.5 JetPack v5.1.…

RocketMQ常用基本操作

文章中的rabbitmq使用的是rocketmq-all-5.1.3-bin-release版本,需要安装包的可自行下载 RockerMQ启动停止命令 启动命令 nohup sh bin/mqnamesrv & nohup sh bin/mqbroker -n localhost:9876 --enable-proxy & 查看日志 tail -f ~/logs/rocketmqlogs/…

多线程编程的挑战与解决方案

多线程编程的挑战与解决方案 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 多线程编程的挑战 在现代软件开发中,多线程编程成为处理并发任务…

PatchTST创新点

这篇论文的创新点主要集中在PatchTST模型的设计和应用中。以下是对其创新点的详细说明: 创新点 频道独立补丁设计:PatchTST模型通过将多变量时间序列分割成不同的频道,每个频道作为单变量时间序列处理。每个频道独立地通过实例归一化操作和补…

明星中药企业系列洞察(九)一手好牌打的稀烂!近500年老字号锁定退市,太安堂为何“塌房”了?

近日,太安堂发布公告称,公司已收到深交所下发的《关于广东太安堂药业股份有限公司股票终止上市的决定》,深交所决定终止公司股票上市,预计其最后交易日期为7月4日。太安堂曾作为国内知名的中成药上市公司之一,是国家级…