2015-10-19 10 views
5

基本的に2つのラベルに2つの乱数を20個まで割り当てようとしています。答えが正しいかどうかに基づいて、別のビューが表示されます。これは10回発生します。 問題は、私が使用するカウンタ "i"にエラーが発生し、変数として宣言しても、定数であるというエラーが表示されることです。値に割り当てることはできません: 'i'は即座に 'let'定数です

@IBAction func submit(sender: AnyObject) { 
    //declarations 
    var i: Int //counter for 10 repetitions 
    var result = 0 
    for i in 0..<10 { 
     //generate 2 random numbers up to 20 
     var rn1 = arc4random_uniform(20) 
     var rn2 = arc4random_uniform(20) 
     //assign the rundom numbers to the labels 
     n1.text = String(rn1) 
     n2.text = String(rn2) 
     result = Int((rn1) + (rn2)) 
     //show respective view based on if answer is correct or not 
     if answer.text == String(result) { 
      i = i + 1 //here i get the error: cannot assign to value 'i' is a 'let' constant 
      performSegueWithIdentifier("firstsegue", sender: self) 
     }else { 
      performSegueWithIdentifier("wrong", sender: self) 
     } 
    } 
} 
+0

条件が一致するとループを1回壊しますか? –

答えて

18

エラーを解決するには、for var i in 0..<10 {を使用します。

for i in 1..<10iはあなたの前の宣言をオーバーライドしますletデフォルトとfor範囲内iの再宣言は、効果的です。ループの途中でiをインクリメントして、あなたのロジックが何をしているのか分かりません。これは、ループが実行される回数に違いはありません - 下記参照:

var i: Int = -1 
print("Outer scope, i=\(i)") // i=-1 
for var i in 0..<10 { // Will be executed 10 times, regardless of what you do to i in the loop 
    print("Inner scope, i=\(i)") // i=0...9, including all 
    if i == 2 { 
     i = i + 10 
     print("Inner, modified i=\(i)") // i=12 
    } 
} 
print("Outer scope, i=\(i)") // i=-1 

/* Complete output: 
Outer scope, i=-1 
Inner scope, i=0 
Inner scope, i=1 
Inner scope, i=2 
Inner, modified i=12 
Inner scope, i=3 
Inner scope, i=4 
Inner scope, i=5 
Inner scope, i=6 
Inner scope, i=7 
Inner scope, i=8 
Inner scope, i=9 
Outer scope, i=-1 
*/ 

重要な点は、スウィフトfor i inループがない C for (i=0; i<10; i++)ループであるということです。

+0

Grimxnさん、本当にありがとう、あなたの答えは私を助けました:) –

+0

よろしくお願いします。だからこそ私はスタックオーバーフローにいる! – Grimxn

関連する問題