功能不变变量(Swift)

时间:2017-08-13 23:31:12

标签: ios swift

我正在快速制作测验游戏,但我遇到了一个问题。我的RandomQuestionGenerator函数似乎没有改变我的correctAnswer变量。我通过将if correctAnswer == 1更改为correctAnswer == 0以及按下按钮运行时的代码来测试此项。我猜有一个愚蠢的明显解决方案,但我无法弄明白。

var correctAnswer = 0 
func RandomQuestionGenerator(){

    var randomQuestion = 
    Int(arc4random_uniform(UInt32(fullQuestions.count)))
    var currentQuestion = fullQuestions[randomQuestion]
    var correctAnswer = currentQuestion.answer

    Label.text = currentQuestion.Question
    Button1.setTitle(currentQuestion.answers[0], for: .normal)
    Button2.setTitle(currentQuestion.answers[1], for: .normal)
    Button3.setTitle(currentQuestion.answers[2], for: .normal)
    Button4.setTitle(currentQuestion.answers[3], for: .normal)

    fullQuestions.remove(at: randomQuestion)
}

override func viewDidAppear(_ animated: Bool) {
    appendQuestions()
    RandomQuestionGenerator()

}

@IBAction func Button1Pressed(_ sender: Any) {
    if correctAnswer == 1{
        RandomQuestionGenerator()
    }
}

1 个答案:

答案 0 :(得分:1)

正如OOPer所说,行var currentQuestion = fullQuestions[randomQuestion]不会重新分配变量,它会“遮蔽”全局变量。这意味着在函数的范围内,就好像您有一个具有相同名称的单独变量一样。退出函数时,变量将恢复为您在开头声明的值。要重新分配变量,请使用currentQuestion = fullQuestions[randomQuestions],因为它不会影子,只需重新分配变量

但是,这可能不是你的问题。我注意到在currentQuestion.answers数组中,您有四个值,索引为0,1,2和3.但是,您将按钮命名为1,2,3和4.看起来这就是为什么if语句是if correctAnswer == 1。如果在这种情况下第一个答案是正确答案,并且currentQuestion.answer可以是1,2,3或4,那可能是您的问题。如果这是您的问题,可以通过将button语句if correctAnswer = 0替换为button1'correctAnswer = 1 for button2来修复if语句,依此类推

希望这有帮助!