请查看以下代码并注意最后一行的编译器错误:
class C {
var value: Int
init( _ value: Int) { self.value = value }
}
let array1 = [C(1), C(2), C(3)]
array1[0].value = 4
struct S {
var value: Int
}
let array2 = [S(value: 1), S(value: 2), S(value: 3)]
array2[0].value = 4 // Error: Cannot assign to property: 'array2' is a 'let' constant
从编译器错误我想得出结论,索引0处的项目正在从array2读取,修改,然后写回到array2。还有什么可以产生尝试修改array2的结果?但是,如果我的推理是正确的,那么为什么array1不会发生同样的事情?
答案 0 :(得分:0)
类是引用类型
与值类型(struct)不同,引用类型在分配给变量或常量时或者传递给函数时不会被复制。而不是副本,而是使用对同一现有实例的引用。
请参阅有关Class & struct
的Apple文档