说明:
扩展
就是为一个已有的类
、结构体
、枚举类型
或者协议类型
添加新功能(包括没有权限获取原始源代码的情况)。
- 添加
计算型属性
和计算类型属性
- 定义
实例方法
和类型方法
- 提供新的
构造器
- 定义
下标
- 定义和使用新的
嵌套类型
- 是一个有类型符合某个
协议
注意:
- 扩展可以为一个类型添加新的功能,但是
不能重写已有的功能
。- 如果你通过扩展为一个已有类型添加新功能,那么新功能对该类型的所有已有实例都是可用的,
即使它们是在这个扩展定义之前创建的
。
21.1 扩展语法
说明:使用
extension
声明扩展
1 | // 形式一:为SomeType添加功能 |
21.2 计算型属性
说明:扩展可以为已有类型添加
计算型实例属性
和计算型类型属性
。
注意:不可以添加存储型属性
,也不可以为已有属性添加属性观察器
。
1 | // 为Double添加一些只读计算属性 |
21.3 构造器
说明:扩展可以为已有类型添加
新的构造器
(便利构造器)
- 在为值类型扩展的构造器中调用
逐一构造器
:值类型的原始实现中未定义任何定制的构造器时
1 | // 大小 |
21.4 方法
说明:扩展可以为已有类型添加新的
实例方法
和类型方法
。
注意:结构体
和枚举
类型中修改self
或其属性
的方法必须将该实例方法标注为mutating
,正如来自原始实现的变异方法
一样。
1 | // 扩展 Int 类型 |
添加变异方法
1 | extension Int { |
21.5 下标
说明:扩展可以为已有类型添加新
下标
1 | // 扩展 Int 类型 |
21.6 嵌套类型
说明:扩展可以为已有的
类
、结构体
和枚举
添加新的嵌套类型
1 | // 扩展 Int 类型 |