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

为什么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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:06:03