你可以定义swift枚举来存储任意类型的关联值,如果需要的话,每个枚举成员的关联值类型可以各不相同。枚举的这种特性和其他语言中的可识别联合,标签联合,或者变体相似。
枚举的原始值和关联值是不同的。原始值是在定义枚举时被预先填充的值,像上述三个ASCII码,对应一个特定的枚举值,它的原始值始终不变。关联值是创建一个基于枚举成员的常量或者变量时才设置的值,枚举成员的关联值可以变化。
递归枚举
与Objective-C语言不同的是,Swift运行直接设置结构体属性的子属性。上面的最后一个列子,就直接设置了someVideoMode中resolution属性的width这个属性,以上操作并不需要重新为整个resolution属性设置新值。
所有结构体都有一个自动生成的成员逐一构造器,用于初始化新结构实例中成员的属性。
//整数,浮点数,布尔值,字符串,数组和字典都是值类型。并且在底层都是以结构体的形式所实现
类是引用类型与值类型不同,引用类型在被赋予到一个变量,常量或者被传递到一个函数时,其值不会被拷贝。因此引用的是已存在的实例本身而不是其拷贝。
结构体属于值类型。当类型的实例被声明为常量的时候,它的所有属性也就成了常量。
类属于引用类型的类则不一样。把一个引用类型的实例赋给一个常量后,仍然可以修改该实例的变量属性。
延迟存储属性:延迟存储属性是指当第一次被调用的时候才会计算其初始值的属性。在属性声明前使用lazy来标示一个延迟存储属性。必须将延迟存储属性声明成变量(使用var关键字),因为属性的初始值可能在实例构造完之后才会得到。而常量属性在构造过程完成之前必须要有初始值,因此无法声明成延迟属性。