扩展(extension)
扩展可以给一个类型添加新的功能,但是不能重写已经存在的功能。扩展可以实现:
- 添加计算型实例属性和计算型类属性
- 定义实例方法和类方法 提供新的构造器
- 定义下标
- 定义和使用新的嵌套类型
- 使已经存在的类型遵循一个协议
对一个现有的类型,如果你定义了一个扩展来添加新的功能,那么这个类型的所有实例都可以使用这个新功能,包括那些在扩展定义之前就存在的实例。
计算型属性扩展:
扩展可以添加新的计算属性,但是它们不能添加存储属性,或向现有的属性添加属性观察者。
构造器扩展
扩展可以给一个类添加新的便利构造器,但是它们不能给类添加新的指定构造器或者析构器。指定构造器和析构器必须始终由类的原始实现提供。
方法扩展:
extension Int {
func repetitions(task: () -> Void){
for _ in 0..<self {
task()
}
}
}
2.repetitions {
print("Hello!")
}
// Hello!
// Hello!
通过扩展添加的实例方法同样也可以修改实例本身。结构体和枚举的方法,若是可以修改 self 或者它自己的属性,则必须将这个实例方法标记为 mutating,就像是改变了方法的原始实现。
可变实例方法扩展
extension Int{
mutating func square(){
self = self * self
}
}
var someInt = 3
someInt.square() //9
扩展可以给现有的类型添加新的下标,