参考资料:
The Swift Programming Language 中文版 -Gitbook
The Swift Programming Language (Swift 3): Enumerations
The Swift Programming Language (Swift 3): Classes and Structures
在开始介绍枚举,类和结构之前,先来看看Swift语言的类型体系(Type System) 。命名类型有四种:协议,枚举,结构,类。复合类型有两种:元组和函数。
#1 枚举
1.枚举为一组相关的值定义了一个共同的类型。
下面使用枚举表示车的颜色:
或者也可以写成:
2.使用switch语句来匹配枚举值
3.枚举的关联值操作(associated values)
好处:能让你存储成员值之外的自定义信息,并且当你每次在代码中使用该成员时允许这个信息产生变化。
这里举官方文档的一个例子说明。不同的条形码类型用Switch语句来检查,你可以在switch的case分支代码中提取每个关联值作为一个常量或者变量。
4.枚举的原始值操作(Raw Values)
(1)作为关联值的替代,枚举成员可以被原始值预先填充,其中这些原始值具有相同的类型。
(2)原始值与关联值的区别:
对于一个枚举成员,它的原始值是相同的;但是它的关联值是不同的,因为关联值是当你创建一个基于枚举成员的新常量或变量时才设立的。
(3)原始整型值的自动递增
(4)通过参数为rawValue的构造函数创建枚举成员,其中possibleNumber是NumberOfApples?类型的
但如果你想要找的possibleNumber的位置是10,那么此构造函数将返回nil。
#2 类和结构体
1.类和结构体的不同:
(1)类允许继承
(2)类型转换(Type casting)允许运行时检查和解释一个类实例的类型
(3)解构器(Deinitializers)允许一个类实例释放其被分配的资源
(4)引用计数(Reference Counting)允许对一个类的多次引用
(5)初始化时,结构体有成员逐一构造器(Memberwise Initializers),但是类没有。
(6)结构体是值类型,类是引用类型(这个是最主要的区别!!!)
2.值类型VS引用类型
值类型->传递时,实例及其包含的属性拷贝(copy)
引用类型 ->传递时,操作的是引用。引用的是实例本身,而不是其拷贝
上代码来看:
对于引用类型,需要注意几点
(1)tenEighty和alsoTenEighty是同一个实例的两种叫法
(2)改变的是被引用的基础ViewMode的frameRate属性,而不改变常量tenEighty和alsoTenEighty的值。这两个常量并不存储实例。
简单来说,值类型就好比双胞胎,引用类型就好比给一个人取不同的外号。
(3)判断两个常量是否引用同一个实例,利用恒等运算符可以实现。
等价于 (===)
不等价于 (!==)