扩展给已经存在的类,结构体,枚举类型和协议增加新的特性。
- 增加计算实例属性和计算类型属性
- 定义实例方法和类型方法
- 提供新的初始化器
- 定义下标
- 定义和使用新的内置类型
- 让一个存在的类型服从一个协议
扩展语法
类似Objective-C中的Category,不同的是,Extension没有名字。扩展可以增加新的功能,但是不能覆盖已有的功能。
Extension能拓展存在的类型使其遵守一个或多个协议。
计算属性拓展
扩展可以给已经存在的类型增加计算实例属性和计算类型属性,如以下扩展了Double类型:
构造方法拓展
扩展能添加新的构造器,类只能能拓展便利构造期,不能扩展指定构造器。
我们可以为Rect拓展一个构造期(便利构造期):
方法扩展
|
|
结果为:
可变实例方法扩展
扩展增加的实例方法可以修改实例本身。结构体和枚举类型中的方法如果想要修改实例本身或者属性的话需要用mutating来修饰方法,所以扩展这样的方法也需要加mutating。
结果为:
下标
扩展可以给存在的类型增加新的下标,顺序从右往左:
结果为:
内置类型
拓展能为现存的类,结构体,枚举添加内置类型
下面的例子为Int添加一个新的枚举类型Kind,Kind包括正,零,负三种状态。
结果为: