学习笔记——Swift协议与协议导向编程


本节定位

项目 内容
所属单元 A1 Swift 语言进阶
所属节次 主题 01 · S2(工作日档 30-45min)
主资料 The Swift Programming Language 中文版 ·「协议」
本节产出 Playground 三段验证代码 + 本篇笔记

对应 Checklist 条目(覆盖后即可勾选):

  • 协议基础:定义、遵循、协议扩展与默认实现
  • 条件一致性:extension where 子句
  • 协议组合(some P1 & P2)与类型擦除(能手写 AnyXxx Eraser)

协议基础:定义与遵循

属性要求与方法要求

协议作为类型使用

遵循协议的两种时机:声明处 vs extension

协议扩展与默认实现

默认实现:给契约配一份兜底行为

静态派发的坑:协议要求 vs 仅在扩展中定义

用 where 约束扩展:给部分遵循方定制行为

条件一致性:extension where 子句

让 Array 在元素可比较时才获得新能力

标准库如何用条件一致性传导 Equatable / Hashable

协议组合与协议继承

some P1 & P2:多个能力的交集

协议继承与 AnyObject 约束

组合 vs 继承:为什么 Swift 鼓励前者

协议导向编程:从继承树到能力拼装

一次重构:把继承层级改写成协议组合

边界:什么时候协议反而是负担

验证理解:三段 Playground 代码

默认实现的派发差异:协议里声明与不声明

预期输出

实际观察

条件一致性:给 Array 加一个只在 Element: Comparable 时可用的方法

预期输出

实际观察

协议组合:用 some P1 & P2 收敛函数签名

预期输出

实际观察

小结

知识点 一句话总结
协议基础
协议扩展与默认实现
派发差异
条件一致性
协议组合与继承
协议导向编程

还没弄明白 / 留给后续回头看的问题

扩展阅读


  目录