函数不变(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()
}
}
正如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语句来解决,如此类推
希望这有助于!
非常感谢,我知道这将是一个愚蠢的简单解决方案。 –
行'var currentQuestion = fullQuestions [randomQuestion]'不是一个简单的赋值。这是本地代码块中的变量声明。新声明的变量在外部范围中显示相同的名称。只要删除该行的'var'即可。你应该总是区分变量声明和赋值。 – OOPer