Swift文档Chapter 9 类和结构体


结构体和类是一种通用而灵活的结构。

结构体和类的对比

结构体和类的共同点

  • 定义属性用于储存值;
  • 定义方法用于提供功能;
  • 定义下标操作用于通过下标语法访问它们的值;
  • 定义构造器用于设置初始值;
  • 通过扩展增加默认实现以外的功能;
  • 遵循协议以提供某种标准功能。

类还有额外的功能:

  • 继承允许一个类继承另一个类的特征;
  • 类型转换允许在运行时检查和解释一个类实例的类型;
  • 析构器允许一个类实例释放任何其所分配的资源;
  • 引用计数允许对一个类的多次引用。

定义语法

结构体使用struct关键字定义,类使用class关键字定义。

struct StructName {
    statements
}
class ClassName{
    statements
}

类和结构体使用UpperCamelCase的方式来命名,属性和方法采用lowerCamelCase的方式进行命名。

结构体和类的实例

声明一个新的类只需要ClassName()就可以了,这种方式下所有的成员都会赋默认初始值。

属性访问

属性的访问使用.即可访问。也可以为可变属性赋值。

结构体类型成员逐一构造器

结构体会自动生成一个成员逐一构造器。可以通过属性名称传递各个属性初始值。在括号中直接通过类似于函数输入参数的方式。
类没有默认的成员逐一构造器。

结构体和枚举是值类型

值类型是这样一种类型,当它被赋值给一个变量、常量或者被传递给一个函数的时候,其值会被拷贝。
Swift中所有的结构体和枚举类型都是值类型。这意味着它们的实例,以及实例中所包含的任何值类型的属性,在代码中传递的时候都会被复制。

类是引用类型

与值类型不同,引用类型在被赋予到一个变量、常量或者被传递到一个函数时,其值不会被拷贝。因此,使用的是已存在实例的引用,而不是其拷贝。
即使把一个类声明成常量,属性依然是可以改变的,这是因为常量中存储的是类的引用。

恒等运算符

  • ===:两个常量或者变量是否引用了同一个实例;
  • !==:两个常量或者变量是否没有引用同一个实例。