扩展就是为一个已有的类、结构体、枚举类型或者协议类型添加新功能。扩展可以为一个类型添加新的功能,但是不能重写已有的功能。
Swift 中的扩展可以:
添加计算型属性和计算型类型属性
定义实例方法和类型方法
提供新的构造器
定义下标
定义和使用新的嵌套类型
使一个已有类型符合某个协议
扩展计算型属性
扩展可以为已有类型添加计算型实例属性和计算型类型属性。这些属性是只读的计算型属性
扩展可以添加新的计算型属性,但是不可以添加存储型属性,也不可以为已有属性添加属性观察器。
构造器
扩展能为类添加新的便利构造器,但是它们不能为类添加新的指定构造器或析构器。指定构造器和析构器必须总是由原始的类实现来提供。
方法
扩展可以为已有类型添加新的实例方法和类型方法。
可变实例方法
通过扩展添加的实例方法也可以修改该实例本身。结构体和枚举类型中修改self或其属性的方法必须将该实例方法标注为mutating,正如来自原始实现的可变方法一样。
extension Int {
mutating func square() {
self = self * self
}
}
下标
扩展可以为已有类型添加新下标。
嵌套类型
扩展可以为已有的类、结构体和枚举添加新的嵌套类型