本节定位
| 项目 | 内容 |
|---|---|
| 所属单元 | 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 收敛函数签名
预期输出
实际观察
小结
| 知识点 | 一句话总结 |
|---|---|
| 协议基础 | |
| 协议扩展与默认实现 | |
| 派发差异 | |
| 条件一致性 | |
| 协议组合与继承 | |
| 协议导向编程 |
还没弄明白 / 留给后续回头看的问题: