Swift 的抽象三件套

学完基础语法,想让代码更通用、更解耦,就绕不开协议、泛型与构建器模式。协议定义"能做什么",泛型定义"对什么类型都能用",构建器模式定义"怎么一步步组装对象"。三者搭起来,就是 Swift 高阶写法。

好的抽象:定义稳定的能力契约,让具体实现可替换、可复用。

这篇把这三件套落到实处。

协议:定义能力契约

协议只声明方法与属性,不写实现。类、结构体去遵守它,就承诺具备这些能力。面向协议编程里,你先设计协议,再让具体类型实现,上层依赖协议而非具体类。

protocol Identifiable {
  var id: String { get }
}
struct User: Identifiable { let id: String }

任何 Identifiable 都能被统一处理,不管它是 User 还是 Article。

协议扩展与默认实现

Swift 的杀手锏:给协议写扩展,提供默认实现。遵守协议的类型自动白拿这套方法,省去每个类型重复写。这是"面向协议"比传统接口更强大的地方。

协议扩展速记
  • 默认实现协议扩展提供通用方法。
  • 条件扩展配合 where 只给满足约束的类型实现。
  • 复用一处实现,多类型共享。

泛型:写出一次通用的代码

同一个函数要能处理 Int、String、任意类型,用泛型占位。下面的交换函数不挑类型:

func swapTwo<T>(_ a: inout T, _ b: inout T) {
  let t = a; a = b; b = t
}

T 是占位类型,调用时由编译器推断具体类型。

Swift 进阶示意:多个相互咬合的几何形状与泛形容器方块拼搭成一座抽象结构,中央发光节点连接各块
泛形容器:几何块按抽象契约拼搭组合。