来源书籍
Swift编程权威指南
编程语言类
- 高浓度:书中在值类型/引用类型语义、协议导向编程、写时复制(COW)、ARC内存管理、泛型系统等章节
不满足于罗列语法,而是深入解释设计取舍的原因——例如第18章从零实现COW机制解释为什么值类型复制不会
带来无谓的内存开销,第19/23章讲协议扩展如何取代传统继承实现代码复用。
- 低稳定性:全书示例代码强绑定Swift 3.0与Xcode 8(2016年前后),大量语法细节(错误处理写法、字符串
索引API、闭包标注等)已随Swift 5+演进而变化;且第26/27/28章大篇幅是Xcode IDE操作步骤和界面截图讲解,
时效性低。
类别清单覆盖
5/8
已覆盖 5
补充生成 0
未覆盖 3
全书概览
Swift编程权威指南(第2版)
Skill 版本:v6(2026-08-28 按 v6 规则续补;既有 v1 章节卡片、实践卡与类别核对保留)
类别:编程语言类
四象限结论:工程实践(高浓度 + 低稳定性)
理由: - 高浓度:书中在值类型/引用类型语义、协议导向编程、写时复制(COW)、ARC内存管理、泛型系统等章节 不满足于罗列语法,而是深入解释设计取舍的原因——例如第18章从零实现COW机制解释为什么值类型复制不会 带来无谓的内存开销,第19/23章讲协议扩展如何取代传统继承实现代码复用。 - 低稳定性:全书示例代码强绑定Swift 3.0与Xcode 8(2016年前后),大量语法细节(错误处理写法、字符串 索引API、闭包标注等)已随Swift 5+演进而变化;且第26/27/28章大篇幅是Xcode IDE操作步骤和界面截图讲解, 时效性低。
章节进度追踪表
| 章节号 | 章节标题 | 精读/略读 | 状态 | 卡片数 |
|---|---|---|---|---|
| 前言 | 前言 | 略读 | done | 0 |
| 1 | 起步 | 略读 | done | 0 |
| 2 | 类型、常量和变量 | 精读 | done | 2 |
| 3 | 条件语句 | 略读 | done | 0 |
| 4 | 数 | 精读 | done | 3 |
| 5 | switch语句 | 精读 | done | 2 |
| 6 | 循环 | 略读 | done | 0 |
| 7 | 字符串 | 精读 | done | 2 |
| 8 | 可空类型 | 精读 | done | 4 |
| 9 | 数组 | 精读 | done | 0 |
| 10 | 字典 | 精读 | done | 1 |
| 11 | 集合 | 精读 | done | 1 |
| 12 | 函数 | 精读 | done | 3 |
| 13 | 闭包 | 精读 | done | 3 |
| 14 | 枚举 | 精读 | done | 3 |
| 15 | 结构体和类 | 精读 | done | 2 |
| 16 | 属性 | 精读 | done | 3 |
| 17 | 初始化 | 精读 | done | 2 |
| 18 | 值类型与引用类型 | 精读 | done | 5 |
| 19 | 协议 | 精读 | done | 2 |
| 20 | 错误处理 | 精读 | done | 2 |
| 21 | 扩展 | 精读 | done | 1 |
| 22 | 泛型 | 精读 | done | 3 |
| 23 | 协议扩展 | 精读 | done | 2 |
| 24 | 内存管理和ARC | 精读 | done | 3 |
| 25 | Equatable和Comparable | 精读 | done | 2 |
| 26 | 第一个Cocoa应用 | 略读 | done | 0 |
| 27 | 第一个iOS应用 | 略读 | done | 0 |
| 28 | 互操作 | 精读 | done | 2 |
| 29 | 结语 | 略读 | done | 0 |
待关联术语
| 术语名 | 出现章节 | 一句话语境 |
|---|
引用文献
| 标题 | 类型 | 出现章节 | 一句话语境 |
|---|---|---|---|
| 《Objective-C编程》 | 书 | 第28章 | 作者建议不熟悉Objective-C的读者参考此书深入学习,本书互操作章节仅讲桥接机制不讲语言本身 |
实践卡进度
| 序号 | 实践标题 | 实践方式 | 状态 | 关联章节 | 产出 |
|---|---|---|---|---|---|
| 1 | 验证struct内嵌class属性会破坏值语义直觉 | 真实任务 | done | 值/引用语义相关章节 | struct内嵌class对比记录 |
| 2 | 实测整数溢出陷阱与溢出运算符的行为差异 | 真实任务 | done | 整数类型相关章节 | 溢出崩溃/环绕对照记录 |
| 003 | 审查闭包捕获 self 的泄漏风险 | 真实任务 | done | 第24章 内存管理和ARC | 闭包捕获审计表 |
| 004 | 设计协议扩展默认实现边界表 | 真实任务 | done | 第23章 协议扩展 | 默认实现覆盖规则表 |
| 005 | 复现实测写时复制触发点 | 真实任务 | done | 第18章 值类型与引用类型 | COW 对照实验记录 |
类别清单核对(编程语言类)
| 维度 | 覆盖状态 | 关联卡片标题或未覆盖理由 |
|---|---|---|
| 类型系统 | 已覆盖 | 类型推断与类型注解;泛型用占位类型换取跨类型复用而不丢失类型安全;类型约束限定泛型占位类型的能力;协议不能泛型化改用关联类型 |
| 内存管理模型 | 已覆盖 | ARC用引用计数取代垃圾回收;循环强引用与weak打破所有权倒置;闭包捕获self同样制造循环强引用 |
| 并发/并行模型 | 未覆盖 | 全书成书于Swift 3.0/Xcode 8时代(async/await、actor等并发特性于Swift 5.5才引入),检索全书未发现线程、GCD、并发相关的实质性讲解 |
| 错误处理机制 | 已覆盖 | 可空类型把缺失值收编进类型系统;强制展开与可空实例绑定的安全性分野;throws与do-catch是编译期强制的错误传播;可恢复错误与不可恢复错误的分野 |
| 编译/执行模型 | 未覆盖 | 书中零星提及”编译器”“特化”等行为(如泛型特化、枚举内存布局计算),但没有章节系统讲解Swift的编译流程、AOT/JIT归属或字节码设计 |
| 模块/包与命名空间设计 | 已覆盖 | 访问控制五级模型;throws与do-catch卡片中提及Swift.Error全名消歧反映的隐式模块命名空间 |
| 语言设计哲学与取舍 | 已覆盖 | 贯穿全书多张卡片,如整数溢出默认触发陷阱、switch必须全覆盖且默认不穿透、值语义与引用语义的本质区别等 |
| 元编程/反射/宏能力 | 未覆盖 | 检索全书未发现反射(Mirror)或宏相关内容;Swift的宏系统直到Swift 5.9才引入,晚于本书成书年代 |
| 性能特性与其代价 | 部分覆盖 | 写时复制让值语义摆脱性能负担;字符串禁止整数下标的原因(O(n)遍历代价);未见到对”zero-cost abstraction”这一术语本身的系统讨论 |
精读章节文件定位(内部备忘,供断点续读)
- 第2章:text00000.html 行1391-1704
- 第4章:text00000.html 行2334-3135
- 第5章:text00000.html 行3135-4527
- 第7章:text00000.html 行5203-5746
- 第8章:text00000.html 行5746-6613
- 第9章:text00000.html 行6623-7468(续text00001.html 行1-106)
- 第10章:text00001.html 行106-773
- 第11章:text00001.html 行773-1365
- 第12章:text00001.html 行1365-2517
- 第13章:text00001.html 行2517-3781
- 第14章:text00001.html 行3790-5169
- 第15章:text00001.html 行5169-6900
- 第16章:text00001.html 行6900-7636(续text00002.html 行1-711)
- 第17章:text00002.html 行711-2267
- 第18章:text00002.html 行2267-3776
- 第19章:text00002.html 行3785-5021
- 第20章:text00002.html 行5021-6924
- 第21章:text00002.html 行6924-7607
- 第22章:text00002.html 行7607-7883(续text00003.html 行1-962)
- 第23章:text00003.html 行962-1805
- 第24章:text00003.html 行1805-2992
- 第25章:text00003.html 行2992-4052
- 第28章:text00003.html 行6697-7026(续text00004.html 行1-973)
章节与卡片
02 类型、常量和变量
- 类型推断与类型注解 普通读书笔记卡
- let优先于var的不可变默认 普通读书笔记卡
04 数
- 整数溢出默认触发陷阱 普通读书笔记卡
- 整数类型间禁止隐式转换 普通读书笔记卡
- 浮点数的尾数指数表示与精度陷阱 普通读书笔记卡
05 switch语句
- switch必须全覆盖且默认不穿透 普通读书笔记卡
- 值绑定与where子句构成的模式匹配 普通读书笔记卡
07 字符串
- 扩展字形簇是Swift字符的设计单位 普通读书笔记卡
- 字符串禁止整数下标的原因 普通读书笔记卡
08 可空类型
- 可空类型把缺失值收编进类型系统 普通读书笔记卡
- 强制展开与可空实例绑定的安全性分野 普通读书笔记卡
- 隐式展开可空类型与推断的安全默认 普通读书笔记卡
- 可空链式调用与nil合并运算符 普通读书笔记卡
10 字典
- 字典键必须可散列 普通读书笔记卡
11 集合
- 数组字典集合的三向权衡 普通读书笔记卡
12 函数
- 外部参数名与内部参数名分离 普通读书笔记卡
- guard语句提前退出与作用域穿透 普通读书笔记卡
- 函数类型使函数成为一等公民 普通读书笔记卡
13 闭包
- 闭包捕获变量形成持久化状态 普通读书笔记卡
- 闭包是引用类型 普通读书笔记卡
- 函数式编程四大支柱 普通读书笔记卡
14 枚举
- switch枚举全覆盖的面向未来设计 普通读书笔记卡
- 关联值让枚举成为代数数据类型 普通读书笔记卡
- 递归枚举与indirect装箱 普通读书笔记卡
15 结构体和类
- 继承是类独有的能力 普通读书笔记卡
- static与class关键字的可重写性差异 普通读书笔记卡
16 属性
- 惰性属性与计算属性的取舍 普通读书笔记卡
- 属性观察者willSet与didSet 普通读书笔记卡
- 访问控制五级模型 普通读书笔记卡
17 初始化
- 指定初始化方法与便捷初始化方法的委托链 普通读书笔记卡
- 初始化方法默认不被子类继承 普通读书笔记卡
18 值类型与引用类型
- 值语义与引用语义的本质区别 普通读书笔记卡
- 相等与同一是两个不同的问题 普通读书笔记卡
- 结构体与类的选择准则 普通读书笔记卡
- 写时复制让值语义摆脱性能负担 普通读书笔记卡
- 值类型内嵌引用类型会破坏复制直觉 普通读书笔记卡
19 协议
- 协议解耦接口与实现并可作为类型使用 普通读书笔记卡
- 协议继承是需求叠加而非强耦合 普通读书笔记卡
20 错误处理
- throws与do-catch是编译期强制的错误传播 普通读书笔记卡
- 可恢复错误与不可恢复错误的分野 普通读书笔记卡
21 扩展
- 扩展只能加行为不能加存储 普通读书笔记卡
22 泛型
- 泛型用占位类型换取跨类型复用而不丢失类型安全 普通读书笔记卡
- 类型约束限定泛型占位类型的能力 普通读书笔记卡
- 协议不能泛型化改用关联类型 普通读书笔记卡
23 协议扩展
- 协议扩展提供默认实现替代继承共享代码 普通读书笔记卡
- where子句限定协议扩展的生效范围 普通读书笔记卡
24 内存管理和ARC
- ARC用引用计数取代垃圾回收 普通读书笔记卡
- 循环强引用与weak打破所有权倒置 普通读书笔记卡
- 闭包捕获self同样制造循环强引用 普通读书笔记卡
25 Equatable和Comparable
- 实现最小运算符换取整族比较能力 普通读书笔记卡
- 运算符本质是声明为静态方法的全局函数 普通读书笔记卡
28 互操作
- 桥接头文件让两种语言互相看见对方 普通读书笔记卡
- 值类型对Objective-C不可见 普通读书笔记卡
相关主题
暂无公开主题。