【问题标题】:Why do I keep getting a "Cannot find '...' in scope" error?为什么我不断收到“在范围内找不到'...'”错误?
【发布时间】:2021-10-27 17:49:05
【问题描述】:

我正在尝试对类似于排行榜的应用进行第二次查看。当游戏在 ContentView 上完成 10 轮时,我希望将计算出的分数存储并打印在 ScoreboardView 上(通过按钮访问)。我使用@Binding 将分数变量从一个视图连接到另一个视图,但不断出现“超出范围”错误。有人知道为什么吗?这是我的 ScoreboardView 代码:

'''

import SwiftUI

struct scoreboardView: View {
    @Binding var score: Int
    var body: some View {
            List {
                ForEach(1..<9) {
                    Text("Game \($0): \(score) ")
                }
            }
        }
    
}

struct scoreboardView_Previews: PreviewProvider {
    static var previews: some View {
        scoreboardView(score: $scoreTracker)
        }
}

'''

这不是我的最终代码,因此忽略中间。但是,我在预览初始化的最后一行得到了错误。

【问题讨论】:

  • 找不到什么?准确的错误消息及其发生的准确位置会很有帮助。
  • @MartinR 它说“在范围内找不到 scoreTracker”。我在我的 contentView 中声明了 scoreTracker 并试图将它连接到这里的“score”变量,但它给了我这个错误。

标签: swift swiftui scope binding


【解决方案1】:

您的代码中没有定义任何名为 scoreTracker 的内容,但您正尝试在预览中使用它。相反,您可以传递一个常量来代替您的绑定(仅用于预览目的):

struct scoreboardView: View {
    @Binding var score: Int
    var body: some View {
        List {
            ForEach(1..<9) {
                Text("Game \($0): \(score) ")
            }
        }
    }
}

struct scoreboardView_Previews: PreviewProvider {
    static var previews: some View {
        scoreboardView(score: .constant(50))
    }
}

【讨论】:

  • 我忘了说,但是 scoreTracker 是 ContentView 中通过@Binding 连接到“score”的变量的名称。在那种情况下它不应该工作吗?
  • 不,不应该。如您所见,您的scoreboardView_PreviewsContentView 没有任何联系。它所做的只是加载scoreboardView。处理这种情况的典型方法正是我所展示的——使用constant。在您的ContentView 预览中,假设scoreboardView 是视图层次结构中ContentView 的子级,您的绑定将通过。
  • 我有点困惑。因此,如果我要运行我的应用程序而不是预览它,那么我在“scoreboardView_Previews”中设置的常量应该无关紧要,对吗?另外,您能否改写答案的最后一句话?我不太明白。
  • 正确,如果不是预览模式也没关系。
  • 如果这回答了您的问题,您可以用绿色复选标记将其标记为正确
猜你喜欢
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 2015-09-06
  • 2014-04-12
  • 1970-01-01
相关资源
最近更新 更多