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

SwiftUI #Preview宏中声明静态变量报错的解决方法

解决SwiftUI #Preview宏中Static properties may only be declared on a type错误

错误原因

你在#Preview宏的闭包内声明了带static关键字的@StateObject属性,但Swift语法明确规定:静态属性只能定义在类型(struct、class、enum等)的作用域内,不能放在函数或闭包的代码块中,这就是触发报错的核心原因。

解决方案

根据你的使用场景,有两种常用的修复方式:

场景1:单个预览使用独立的Store实例

直接移除static关键字,在#Preview闭包内正常声明@StateObject即可,#Preview的闭包本身支持使用这类属性包装器:

#Preview {
    @StateObject var store = Store()
    // 替换成你的目标视图,传入store实例
    ContentView(store: store)
}

场景2:多个预览共享同一个Store实例

如果需要在多个预览视图间复用同一个Store实例,可以把预览逻辑封装成遵循PreviewProvider协议的结构体,将静态属性放在结构体的类型作用域内:

struct StoreSharedPreview: PreviewProvider {
    // 静态属性放在结构体(类型)内,符合Swift语法要求
    @StateObject static var store = Store()
    
    static var previews: some View {
        Group {
            ContentView(store: store)
            SettingsView(store: store)
        }
    }
}

内容的提问来源于stack exchange,提问作者Deepak Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:33:11