swift中使用ObservableObject单利模式的时候,用let 或 @ObservedObject 或 @StateObject 有什么区别
2026/4/11 11:15:55 网站建设 项目流程

使用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 会保持同一个实例

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

最适合单例场景

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询