类和结构体
区别
相同点
- 定义属性用于存储值
- 定义方法用于提供功能
- 定义附属脚本用于访问
- 定义构造器用于生成初始化
- 通过扩展以增加默认实现的
- 实现协议以提供某种标准功能
不同点(类多了以下特点)
- 继承允许一个类继承另一个类的特征
- 类型转换允许在运行时检查和解释一个类实例的类型
- 解构器允许一个类实例释放任何其所被分配的资源
- 引用计数允许对一个类的多次引用
定义
1 | class SomeClass { |
结构体逐一成员构造器
1 | struct Resolution { |
结构体和枚举都是值类型
值类型和引用类型
Swift 的类型分为值类型和引用类型两种,值类型在传递和赋值时将进行复制,而引用类型则只会使用引用对象的一个 “指向”。
Swift 中的所有的内建类型都是值类型(Int, Bool, Array, String, Dictionary)
值类型的一个特点是在传递和赋值时进行复制,每次复制肯定会产生额外开销,但是在 Swift 中这个消耗被控制在了最小范围内,在没有必要复制的时候,值类型的复制都是不会发生的
简单的赋值,参数的传递等等普通操作,虽然我们可能用不同的名字来回设置和传递值类型,但是在内存上它们都是同一块内容
1
2
3
4
5 >var a = [1, 2, 3]
var b = a
a.removeAtIndex(0)
// 此时 ab的内存地址不在相同
>
恒等运算符
===
判断两个常量或变量是否指向同一个对象
继承
1 | class SomeClass: SomeSuperclass { |
重写(overriding)
swift 中可以重写继承来的实例方法,类方法,实例属性,下标脚本, 需加
override
关键字。
1 | class Train: Vehicle { |
重写方法
1 |
|
重写属性
重写属性时,必需将它的名字和类型都写出来
可以将继承来的只读属性重写为读写属性, 但是不可将一个继承来得读写属性重写为只读属性
1 | //双人自行车 |
重写属性观察器
不可为常量或只读计算属性添加属性观察器, 这些属性不可被设置。
不可同时提供setter和属性观察器。
1 | class AutomaticCar: Car { |
防止重写
加final
关键字
在关键字class前添加final修饰符(final class)来将整个类标记为 final 的