I want to store structs inside an array, access and change the values of the struct in a for loop.
struct testing {
var value:Int
}
var test1 = testing(value: 6 )
test1.value = 2
// this works with no issue
var test2 = testing(value: 12 )
var testings = [ test1, test2 ]
for test in testings{
test.value = 3
// here I get the error:"Can not assign to 'value' in 'test'"
}
If I change the struct to class it works. Can anyone tell me how I can change the value of the struct.
Besides what said by @MikeS, remember that structs are value types. So in the for
loop:
for test in testings {
a copy of an array element is assigned to the test
variable. Any change you make on it is restricted to the test
variable, without doing any actual change to the array elements. It works for classes because they are reference types, hence the reference and not the value is copied to the test
variable.
The proper way to do that is by using a for
by index:
for index in 0..<testings.count {
testings[index].value = 15
}
in this case you are accessing (and modifying) the actual struct element and not a copy of it.