函数不改变变量 (Swift)



我正在用 swift 制作一个测验游戏,我遇到了一个问题。我的 RandomQuestionGenerator 函数似乎没有改变我的 correctAnswer 变量。我通过将 if correctAnswer == 1 更改为 if 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()
}
}

正如 OOPer 所说,行var currentQuestion = fullQuestions[randomQuestion]不会重新分配变量,而是"隐藏"全局变量。这意味着在函数的作用域中,就好像您有一个具有相同名称的单独变量。退出函数时,变量将恢复为您在开始时声明的值。要重新分配变量,请使用currentQuestion = fullQuestions[randomQuestions],因为这不会隐藏,而只是重新分配变量

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

希望这有帮助!

最新更新