摘要訊息 : Swift 中的擴展教學.

0. 前言

本文于 2022 年 3 月 18 日进行一次更新和修正. 修正之后本文已经归档, 不再享受更新.

1. 扩展的用途

Swift 中的扩展功能可以动态地给类增加功能, 但重写的功能不可以使用扩展. 扩展可以完成以下的任务 :

  • 添加计算型属性和计算静态属性;
  • 定义实例方法和类型方法;
  • 提供新的构造器;
  • 定义下标;
  • 定义和使用新的嵌套类型;
  • 使一个已有的类型符合某个接口.

2. 扩展类型的属性

extension Int {
    var double : Int {
        return self * 2
    }
    var triple : Int {
        return self * 3
    }
    var fourfold : Int {
        return self * 4
    }
    var half : Double {
        return Double(self) / 2.0
    }
}
var x = 10
print(x.half)    // 结果 : 5
print(x.double)    // 结果 : 20

3. 拓展类型的方法

struct point {
    var x = 0.0
    var y = 0.0
}
extension point {
    func distance(p : point) -> Double {
        let dis_x = p.x - self.x
        let dis_y = p.y - self.y
        return sqrt(dis_x * dis_x + dis_y * dis_y)
    }
}
let start_point = point(x : 0, y : 0)
let end_point = point(x : 1, y : 1)
print(start_point.distance(p : end_point))    // 结果 : 1.4142135623731