Z
ZHANK
面向协议

扩展 Extension

extension 添加方法/计算属性、协议一致性扩展、嵌套类型

扩展 Extension

Extension 给已有的类型(包括系统类型)添加方法、计算属性、协议遵守——不需要访问源码。

学完本章你将: 掌握 extension 添加方法/计算属性、协议一致性。


添加方法

swift
extension Int {
    var squared: Int { self * self }

    func repeated(_ closure: () -> Void) {
        for _ in 0..<self { closure() }
    }
}

print(5.squared)  // 25

3.repeated { print("Hello") }
// Hello Hello Hello

协议一致性扩展

swift
protocol Greetable {
    func greet() -> String
}

struct Person {
    let name: String
}

extension Person: Greetable {
    func greet() -> String {
        "Hello, \(name)!"
    }
}

let p = Person(name: "小明")
print(p.greet())

extension vs 子类

swift
// extension:横向扩展、无继承
// 子类:纵向扩展、有继承层级

// Swift 社区倾向:能用 extension 就不用子类
// 标准库大量使用 extension 按功能分组方法

💡 打开 Swift 标准库源码——你会发现类型定义只有核心属性,所有方法都在 extension 中,按协议分组。