Consider the following example.
struct AStruct{
var i = 0
}
class AClass{
var i = 0
var a: A = A(i: 8)
func aStruct() -> AStruct{
Try this.
var aValue = ca.aStruct()
aValue.i = 9
Explanation
aStruct()
actually returns a copy of the original struct a
. it will implicitly be treated as a constant unless you assign it a var
.
This is compiler's way of telling you that the modification of the struct
is useless.
Here is what happens: when you call aStruct()
, a copy of A
is passed back to you. This copy is temporary. You can examine its fields, or assign it to a variable (in which case you would be able to access your modifications back). If the compiler would let you make modifications to this temporary structure, you would have no way of accessing them back. That is why the compiler is certain that this is a programming error.
Try using a class
instead of a struct
, as it's passed by reference and holds onto the object, while a struct
is passed by value (a copy is created).