Sample code:
struct test {
var itest: Int?;
}
var tests : [test] = [];
var t = test();
tests.append(t)
t.itest = 99;
print(tests[0].itest)
print(t.itest)
produces
nil
Optional(99)
So it seems the append command creates a copy of t and not its reference. If the array would contain a reference of t, both print outs must be itest=99.