扩展为现有的类,结构体,枚举类型,或协议添加了新功能.这也包括了为无访问权限的源代码扩展类型的能力(即所谓的逆向建模)
扩展和OC的中category类似.(与OC的分类不同的是,Swift的扩展没有名字)
1.添加计算实例属性和计算类型属性
2.定义实例方法和类型方法
3.提供新初始化器
4.定义下标
5.定义和使用新内嵌类型
6.使现有的类型遵循某协议
7.扩展可以向一个类型添加新的方法,但是不能重写已有的方法
扩展可以向自己已有的类型添加计算实例属性和计算类型属性
extension Double {
var km:Double {return self * 1000.0 }
var m:Double = {return self }
var cm:Double = {return self / 100.0}
}
扩展可向已有的类型添加新的初始化器.这允许你扩展其他类型以使初始化接收你的自定义类型作为形式参数,或提供该类型的原始实现中未包含的额外初始化选项.
扩展能为类添加新的便捷初始化器,但是不能为类添加指定初始化器或反初始化器.指定初始化器和反初始化器必须由原来类的实现提供.
struct Size {
var width = 0.0, height = 0.0
}
struct Point {
var x = 0.0, y = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
}
extension Rect
{
init(center: Point , size:Size) {
let originX = center.x - (size.width / 2)
let originY = center.y - (size.height / 2)
self.init(origin: Point(x: originX, y: originY), size: size)
}
}
var someIn = 30
someIn.square()
extension Int
{
mutating func square() {
self = self * self
}
}