news 2026/6/10 9:19:49

swift中使用ObservableObject单利模式的时候,用let 或 @ObservedObject 或 @StateObject 有什么区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
swift中使用ObservableObject单利模式的时候,用let 或 @ObservedObject 或 @StateObject 有什么区别

使用let(简单引用)

struct ContentView: View { let gameManager = GameManager.shared var body: some View { Text(gameManager.gameState.rawValue) // ❌ 不会自动更新! } }

问题:

获取的是单例的引用

但 不会触发视图更新 当 @Published 属性变化时

SwiftUI 不知道这个对象是 ObservableObject

使用@ObservedObject

struct ParentView: View { @StateObject private var manager = GameManager.shared var body: some View { ChildView(gameManager: manager) // 作为参数传递 } } struct ChildView: View { @ObservedObject var gameManager: GameManager // 从父视图接收 var body: some View { Text(gameManager.gameState.rawValue) } }

特点:

✅ 会触发视图更新 当 @Published 属性变化时

❌ 可能被重新创建 如果父视图重建

适用于:从父视图传递下来的 ObservableObject

使用@StateObject(推荐用于单例)

struct ContentView: View { @StateObject private var gameManager = GameManager.shared var body: some View { Text(gameManager.gameState.rawValue) // ✅ 会自动更新 } }

特点:

✅ 会触发视图更新

✅ 不会被意外重新创建 - SwiftUI 会保持同一个实例

✅ 生命周期与视图相同 - 但因为是单例,所以实际是全局的

最适合单例场景

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 8:57:40

20251215,豆包帮我写代码注释,靠谱吗?

问题描述 有个需求&#xff0c;很别扭。代码初版2019年6月21日&#xff0c;至今6年。而且&#xff0c;语法是这样&#xff0c;基本上不太想动&#xff0c;基本上不想维护了。如下的代码120行&#xff0c;没有任何注释。看一次&#xff0c;吐一次。 <ul class"carInfo…

作者头像 李华
网站建设 2026/6/9 21:25:46

告别单调界面:打造专属Media Player Classic-HC主题的完整指南

告别单调界面&#xff1a;打造专属Media Player Classic-HC主题的完整指南 【免费下载链接】mpc-hc Media Player Classic 项目地址: https://gitcode.com/gh_mirrors/mp/mpc-hc 你是否已经厌倦了默认播放器界面的单调外观&#xff1f;想让视频播放体验更具个性化但不知…

作者头像 李华
网站建设 2026/6/9 19:21:14

21、R语言统计计算全攻略:从基础到实战

R语言统计计算全攻略:从基础到实战 1. 用户自定义函数 R语言的强大之处不仅在于其丰富的内置函数,如 length 和 dim ,更在于用户能够自定义函数并在程序中调用。自定义函数的一般结构如下: my_func_name <- function([optional arguments]) {operationsreturn(v…

作者头像 李华
网站建设 2026/6/8 13:00:44

22、R语言统计计算与数据处理全解析

R语言统计计算与数据处理全解析 1. 统计计算基础 在R语言中,我们可以进行各种统计计算和数据可视化操作。以下是一些基本的数据生成和绘图示例。 1.1 数据生成 # generate data x <- 1:30 y <- rnorm(30, mean = x) y2 <- rnorm(30, mean = x, sd = sqrt(x))上述…

作者头像 李华
网站建设 2026/6/8 9:26:15

计算机毕业设计springboot淮师大学生成绩管理系统 基于 SpringBoot 的淮师大教务成绩分析与发布平台 淮阴师范学院学业成绩数字化综合管理平台

计算机毕业设计springboot淮师大学生成绩管理系统8qvsgqr1 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。当“一网通办”成为高校新常态&#xff0c;成绩却仍躺在 Excel 里来回…

作者头像 李华
网站建设 2026/6/7 5:56:21

6-5 WPS JS宏 集合成员迭代(随机生成试题)

示例&#xff1a;随机生成试题 题库&#xff1a; 结果&#xff1a; 代码&#xff1a; function 试卷(){ var arrSheets("题库").Range("a2:b21").Value(); var srnd(8,1,arr.length); var num1; var newarr[]; for(var v of s){ newarr.push([num,..…

作者头像 李华