说明:
扩展就是为一个已有的类、结构体、枚举类型或者协议类型添加新功能(包括没有权限获取原始源代码的情况)。
- 添加
计算型属性和计算类型属性- 定义
实例方法和类型方法- 提供新的
构造器- 定义
下标- 定义和使用新的
嵌套类型- 是一个有类型符合某个
协议注意:
- 扩展可以为一个类型添加新的功能,但是
不能重写已有的功能。- 如果你通过扩展为一个已有类型添加新功能,那么新功能对该类型的所有已有实例都是可用的,
即使它们是在这个扩展定义之前创建的。
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 类型 |