Skip to content

Swift 入门(13):扩展

扩展(extension 可以给已有的类、结构体、枚举、协议 添加新功能,而无需修改原有代码。
这在实际开发中非常常用。

1. 给已有类型添加方法

swift
extension Int {
    func squared() -> Int {
        return self * self
    }
}

print(5.squared()) // 25

2. 添加计算属性

swift
extension Double {
    var km: Double { self * 1000 }
    var cm: Double { self / 100 }
}

print(5.0.km) // 5000.0
print(120.0.cm) // 1.2

3. 初始化器扩展

扩展也能添加新的初始化方法。

swift
struct Point {
    var x = 0.0, y = 0.0
}

extension Point {
    init(value: Double) {
        self.x = value
        self.y = value
    }
}

let p = Point(value: 3.0)
print(p) // Point(x: 3.0, y: 3.0)

4. 协议 + 扩展

扩展能给协议提供 默认实现

swift
protocol Greetable {
    func greet()
}

extension Greetable {
    func greet() {
        print("你好,欢迎学习 Swift!")
    }
}

struct Student: Greetable {}

let s = Student()
s.greet() // 你好,欢迎学习 Swift!

5. 限制扩展

可以通过 where 限制扩展只对特定类型生效。

swift
extension Collection where Element: Comparable {
    func isSorted() -> Bool {
        return self == self.sorted()
    }
}

print([1, 2, 3].isSorted()) // true
print([3, 1, 2].isSorted()) // false

总结

  • 扩展 可以给已有类型添加 方法、属性、初始化器
  • 协议扩展 能写默认实现,非常常用。
  • 可以用 where 限制扩展范围
  • 扩展不会覆盖原有实现,但能让代码更简洁。

本站总访问