2017-08-13 45 views
0

我正在用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

回答

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,那可能是您的問題。如果這是你的問題,它可以通過替換按鈕1'correctAnswer = 1 button2的if correctAnswer = 0 if語句來解決,如此類推

希望這有助於!

+0

非常感謝,我知道這將是一個愚蠢的簡單解決方案。 –