如果常量数组的项是引用(值)类型,则不能(不能)修改它们。为什么?



请查看以下代码,并在最后一行中注意编译器错误:

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不会发生同一件事?

类是参考类型

与值类型(struct)不同,当将参考类型分配给变量或常数时,或传递给函数时,参考类型不会复制。而不是副本,而是使用对同一现有实例的引用。

请参阅有关类&的Apple文档。struct

最新更新