扩展:
1.可以添加计算型属性(包括实例和类型),不可以添加新的存储型属性,也不可以为已有属性添加属性观察器
extension Double {
var km: Double { return self*1_000.0 }
var m: Double { return self }
}
屏幕快照 2020-03-22 上午10.09.52.png
2.可以为类型添加构造器。注意,它可以为类添加新的便利构造器,但不可以提供指定构造器和析构器。指定构造器和析构器必须由原始类提供。
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()
}
当你没有为类型提供定制的构造方法时,系统会默认提供一个逐一成员构造器,比如Rect,会有一个init(orgin orgin: Point, size size: Size)方法。又因为为所有存储属性提供了默认值,所有还会获得一个默认构造器。
定制的方法如下:
extension Rect {
init(center: Point, size: Size) {
let orginX = center.x - size.width/2
let orginY = center.y - size.height/2
self.init(origin: Point.init(x: orginX, y: orginY), size: size)
}
}
3.可以为类型添加新的实例方法和类型方法,对于可以修改结构体和枚举的self或者及其属性的时候,需要添加mutating
4.可以为已有类型添加下标
5.可以为已有类型添加新的嵌套类型