Ios 在定义的同一iAction中使用未解析标识符

Ios 在定义的同一iAction中使用未解析标识符,ios,swift,Ios,Swift,所以我是swift的新手,不知道为什么它不能识别printright\u答案,即使它和它的声明在同一个iAction函数中 @IBAction func answer_three(_ sender: Any) { if randomnumber1 == 2 { var right_answer = true } else { let right_answer = true } //Error "Use of unresolve

所以我是swift的新手,不知道为什么它不能识别printright\u答案,即使它和它的声明在同一个iAction函数中

@IBAction func answer_three(_ sender: Any) {
    if randomnumber1 == 2  {
        var right_answer = true

    } else {
        let right_answer = true

    }
    //Error "Use of unresolved identifier 'right_answer' on line below
    print(right_answer)
}

如果您需要更多信息或代码,请告诉我。

任何时候使用大括号,它都会定义一个局部范围。当您离开花括号时,您将退出该范围。如果在一组大括号内定义变量,则该变量仅存在于这些大括号内

将变量的声明向右移动到函数顶部,如下所示:

@IBAction func answer_three(_ sender: Any) -> Bool {
    var right_answer: Bool
    if randomnumber1 == 2  {
       right_answer = true
    } else {
       right_answer = true
    }
    print(right_answer)
    return right_answer
}
您的原始代码在所有情况下都将正确答案设置为true,这没有多大意义。因为我不知道你想要它做什么,所以我就这样离开了

请注意,变量right_answer仍然是函数的局部变量。当您退出函数时,该变量超出范围,并且该变量不再存在。没关系,因为您关心的是函数的返回值


局部和全局范围的概念是编程的基础。你应该读一本关于编程的书。苹果的快速编程iBook将是一个不错的选择。它教您从一开始就使用Swift编程。

您应该在if-else语句外声明right\u-answer,或者在if-else语句中编写print方法。您甚至可以编写let-right\u-answer:Bool,因为它实际上初始化为常量up。我考虑过这个建议,没错。我认为这是一个打字错误,这将扼杀本地范围的教训。