函数不变(Swift)

问题描述:

我正在用swift做一个测验游戏,并且我遇到了一个问题。我的RandomQuestionGenerator函数似乎并没有改变我的correctAnswer变量。我通过将if correctAnswer == 1更改为correctAnswer == 0和我按下按钮时的代码运行来测试此项。我猜测有一个愚蠢的明显的解决方案,但我无法弄清楚。函数不变(Swift)

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() 
    } 
} 
+0

行'var currentQuestion = fullQuestions [randomQuestion]'不是一个简单的赋值。这是本地代码块中的变量声明。新声明的变量在外部范围中显示相同的名称。只要删除该行的'var'即可。你应该总是区分变量声明和赋值。 – OOPer

正如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,那可能是您的问题。如果这是你的问题,它可以通过替换按钮1'correctAnswer = 1 button2的if correctAnswer = 0 if语句来解决,如此类推

希望这有助于!

+0

非常感谢,我知道这将是一个愚蠢的简单解决方案。 –