类和结构
类
类是引用类型。
使用 Identity Operators(===
, !===
) 来判断两个变量(或常量)是否引用同一个实例。
(注意, Identical to 与 Equal to 的区别)
结构
结构都是值类型。
结构都有一个自动生成的 memberwise initializer ,用来初始化结构体中的成员属性。
引用类型:赋值、传递时,使用的是引用。
值类型:赋值、传递时,值会被拷贝。
Swift 中,所有的基本类型都是值类型,包括,整数、浮点数、布尔值、字符串、数组、字典。String, Array, Dictionary 背后是通过结构体来实现的。然而,Swift 只会在真正需要拷贝的时候,才进行实际的拷贝动作。
值类型/引用类型、常量/变量
值得一提的是,将一个引用类型赋值给常量(let constantName = ReferenceType(...)
),依旧可以修改引用类型中的属性。
这本不是什么奇怪的事情,不可以修改 constantName
,不代表不可以修改其所引用的实例。然而,由于数组、字典这一类基本类型是值类型,如果将TA们赋值给常量,就不能修改里面的元素了。