擴展:
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.可以為已有類型添加新的嵌套類型