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
相关产品推荐
相关产品推荐

