扩展就是向一个已有的类、结构体和枚举类型添加新功能。扩展可以对一个类型添加新的功能,但是不能重写已有的功能。
Swift中扩展可以:
- 添加计算型属性和计算型静态属性
- 定义实例方法和类型方法
- 提供新的构造器
- 定义下标
- 定义和使用新的嵌套类型
- 使一个已有类型符合某个协议
语法:扩展声明使用关键字extension
1 | extension SomeType{ |
一个扩展可以扩展一个已有尅性,使其能够适配一个或多个协议,语法格式:
1 | extension SomeType: SomeProtocol, AnotherProtocol{ |
计算型属性
扩展可以向已有类型添加计算型实例属性和计算型类型属性。
1 | // 扩展Int类型,添加属性 |
扩展可以添加新的计算型属性,但是不可以添加存储型属性,也不可以为已有属性添加属性观察器
构造器
- 扩展可以向已有类型添加新的构造器。
- 扩展可以定制类型作为构造器参数,或者提供该类型的原始实现中没有包含的额外初始化选项。
- 扩展可以向类中添加新的便利构造器init(),但是不能向类中添加新的指定构造器或析构函数deinit()
1 | struct Size { |
方法
扩展可以为已有类型添加实例方法和类型方法
实例方法
1 | extension Int { |
类型方法
1 | extension Int { |
可变实例方法
通过扩展添加的实例方法也可以修改该实例本身。结构体和枚举类型中修改self或其他属性的方法必须将该方法标注为mutating
1 | extension Int { |
下标
扩展可以为已有类型添加新下标,该下标返回十进制数字从右到左数的第n个数字
1 | extension Int { |
嵌套类型
扩展可以为已有的类、结构体和枚举添加新的嵌套类型
1 | extension Int{ |
参考: