扩展

扩展:
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.可以为已有类型添加新的嵌套类型

你可能感兴趣的:(扩展)