为什么SwiftUI使用@Binding时会出现'Cannot find ... in scope'错误
错误原因排查
1. 核心报错原因:预览作用域不存在绑定源
你在scoreboardView_Previews中直接使用$scoreTracker传参,但这个变量没有在预览的作用域内定义,SwiftUI找不到目标变量自然会抛出out of scope错误。
@Binding类型的属性要求传入一个绑定值的引用,预览代码是独立运行的,无法直接访问你在其他视图(比如ContentView)里定义的状态变量,需要单独给预览提供临时的测试绑定源。
2. 非直接报错的规范问题(建议修正)
Swift官方编码规范要求视图结构体使用大驼峰命名,你当前的scoreboardView建议改为ScoreboardView,避免后续出现编译歧义。
修正后可运行代码
import SwiftUI struct ScoreboardView: View { @Binding var score: Int var body: some View { List { ForEach(1..<9) { index in Text("Game \(index): \(score) ") } } } } struct ScoreboardView_Previews: PreviewProvider { // 预览内新增静态测试状态变量作为绑定源 @State static var previewTestScore = 0 static var previews: some View { // 传入测试变量的绑定 ScoreboardView(score: $previewTestScore) } }
实际页面跳转用法说明
在ContentView中跳转时,直接传入你存储最终分数的@State变量的绑定即可,示例如下:
// ContentView内的示例代码 @State private var finalScore: Int = 0 // 跳转逻辑 NavigationLink("查看排行榜") { ScoreboardView(score: $finalScore) }
内容的提问来源于stack exchange,提问作者Krish
相关产品推荐
相关产品推荐

