So basically i am trying to assign 2 random numbers up to 20 in 2 labels and the user will have to find the correct result. A different view will appear based on if the answer is correct or not and this will happen 10 times. The problem is that I get an error on the counter "i" that I use and even though I declare it as variable, I get an error saying that it is a constant.
@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)
}
}
}
Use for var i in 0..<10 {
to overcome the error.
The i
in for i in 1..<10
is effectively a redeclaration of i
in the for
scope, which defaults to let
and overrides your previous declaration. No idea what your logic is doing, mind, incrementing i
in the middle of the loop. It will make no difference to the number of times the loop is executed - see below:
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
*/
The important point is that a Swift for i in
loop is not a C for (i=0; i<10; i++)
loop.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With