i wrote this code
var array = [4 , 5 ,2 , 10 , 11]
for item in array {
array[item] = array[item] + 3
}
but i got this error :
error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).
The process has been left at the point where it was interrupted, use "thread return -x" to return to the state before expression evaluation.
It’s because the item
vairable holds the element in the array, not index.
From to your code:
This is the same as trying to write
array[4] = array[4] + 3
array[5] = array[5] + 3 // should crash here
array[2] = array[2] + 3
array[10] = array[10] + 3
array[11] = array[11] + 3
As you can see, you’re using the elements of the array
as if they’re indices.
What you want is:
var array = [4 , 5 ,2 , 10 , 11]
for index in array.indices {
array[index] = array[index] + 3
}
Which is then equivalent to
array[0] = array[0] + 3
array[1] = array[1] + 3
...
Since Array
‘s index is of type Int
, the program compiles and run.
P.S.
You can use +=
instead of adding value manually
var array = [4 , 5 ,2 , 10 , 11]
for index in array.indices {
array[index] += 3
}
Even better, you can use functional api we have
var array = [4 , 5 ,2 , 10 , 11]
array = array.map { $0 + 3 }
7 Likes