2017-08-13 17 views
0

私はすぐにクイズゲームを作っていますが、問題が発生しました。私のRandomQuestionGenerator関数は私のcorrectAnswer変数を変更していないようです。私はcorrectAnswer == 1をcorrectAnswer == 0に変更し、ボタンを押したときのコードを変更することでこれをテストしました。私は愚かな明らかな解決策があると推測していますが、私はそれを理解することはできません。 OOPerが言ったように関数が変数を変更していない(スウィフト)

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

、ラインvar currentQuestion = fullQuestions[randomQuestion]は、その「影」のグローバル変数を変数を再割り当てしません。つまり、関数の範囲内では、同じ名前の別個の変数を持つようになります。関数を終了すると、変数は最初に宣言した値に戻ります。変数を再割り当てするには、シャドウではないので、currentQuestion = fullQuestions[randomQuestions]を使用してください。

ただし、これは問題ではありません。私はあなたのcurrentQuestion.answers配列に、インデックス0,1,2、および3を持つ4つの値があることに気づいた。しかし、あなたのボタン1,2,3および4の名前を付けた。これはif文がif correctAnswer == 1 。この場合、最初の回答が正しい場合、currentQuestion.answerは1,2,3または4のいずれかになります。これが問題の可能性があります。これが問題の場合は、ボタン1の場合はif correctAnswer = 0、ボタン2の場合はcorrectAnswer = 1などのif文を置き換えることで修正できます。

+0

ありがとう、私はそれが愚かな簡単な解決策であることを知っていた。 –

関連する問題