Xcode 15-15.2中@Observable无法正常工作的问题求助
解决Xcode 15中@Observable无法正常运行的问题
你核心的问题是混淆了SwiftUI里两种不同的可观察对象实现:@Observable宏和**ObservableObject协议**,这两者是独立的机制,不能混为一谈。
1. @Observable的正确用法(Xcode15/iOS17+新增)
@Observable是SwiftUI 4引入的新宏,不需要让类遵循任何协议,直接给类添加宏标记,类里的所有属性都会自动成为可观察属性,不需要额外加@Published:
import SwiftUI @Observable class User { var name: String = "Luca" var age: Int = 30 } // 在View中使用 struct UserView: View { var user = User() var body: some View { VStack { Text(user.name) Button("改名") { user.name = "New Name" } } } }
2. ObservableObject的旧用法
你提到的苹果示例代码里的ObservableObject是旧版本的实现,需要类遵循该协议,并且用@Published标记需要被观察的属性:
import SwiftUI class User: ObservableObject { @Published var name: String = "Luca" @Published var age: Int = 30 } // 在View中使用 struct UserView: View { @StateObject var user = User() // 需要用@StateObject或@ObservedObject var body: some View { VStack { Text(user.name) Button("改名") { user.name = "New Name" } } } }
你可能遗漏的关键点
- 确保你的Playground设置了**iOS 17+/macOS 14+**的部署目标,
@Observable只支持这个版本以上的系统 - 必须导入
SwiftUI框架,@Observable宏属于SwiftUI模块 - 不要同时给类添加
@Observable宏又遵循ObservableObject协议,这会导致冲突
内容的提问来源于stack exchange,提问作者Luca Bartoletti
相关产品推荐
相关产品推荐

