扩展 就是为一个已有的类、结构体、枚举类型或者协议类型添加新功能。与OC不同的是,Swift的扩展没有名字。
Swift扩展可以:
- 添加计算型属性和计算型类型属性
- 定义实例方法和类型方法
- 提供新的构造器
- 定义下标
- 定义和使用新的嵌套类型
- 使用一个已有类型符合某个协议
扩展可以为一个类型添加新的功能,但是不能重写已有的功能。
用法:
extension SomeType {
// 为 SomeType 添加的新功能写到这里
}
可以通过扩展来扩展一个已有类型,使其采纳一个或多个协议。
extension SomeType: SomeProtocol, AnotherProctocol {
// 协议实现写到这里
}
如果你通过扩展为一个已有类型添加新功能,那么新功能对该类型的所有已有实例都是可用的,即使它们是在这个扩展定义之前创建的。
扩展可以添加计算属性,不能添加存储属性,也不能为已有属性添加观察器。扩展可以为类添加便利构造器,但不能添加指定构造器或析构器。指定构造器和析构器必须由原始类来提供。
如果你使用扩展为一个值类型添加构造器,同时该值类型的原始实现中未定义任何定制的构造器且所有存储属性提供了默认值,那么我们就可以在扩展中的构造器里调用默认构造器和逐一成员构造器。
可变实例方法
通过扩展添加的实例方法也可以修改该实例本身。结构体和枚举类型中修改 self 或其属性的方法必须将该实例方法标注为 mutating,正如来自原始实现的可变方法一样。