You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:38:12