语法速查附录
本教程共 93 篇 · 第 92 篇 · 更新于 2026-08-08 · 约 6 分钟阅读
本节目标:手边放一份 Swift 6.3.2 的关键字与运算符速查表,写代码卡壳时快速对照,不必回翻前面各章。
这份附录把全书的语法点压成两张表。关键字部分依据官方词法规范,运算符部分按用途归类。它们不替代正文讲解,只帮你回忆”那个词/符号长什么样、干嘛用”。附录的定位是”忘了秒查”,不是教程正文,所以内容以表格和英文关键字为主,中文讲解只在必要处点睛。如果你对某个关键字或运算符的来龙去脉感兴趣,回到对应正文章节看完整讲解会更有收获。
1-1 关键字的两条规矩
Swift 有一批保留字,默认不能当变量名用。真要用,把它用反引号包起来,比如 `class` 就是合法标识符——但这属于奇技,正常代码别这么干。保留字的存在是为了让编译器能无歧义地解析语法,每个关键字都对应着特定的编译期行为或运行时语义,理解它们的分类有助于你建立对语言全貌的直觉。
另一点是版本演进:早期 #file、#line 这类是保留关键字,现在改成了标准库宏(#file、#line 等仍可写,但本质是宏调用)。下面列表以 Swift 6.3.2 为准。
1-2 声明用关键字
用在”定义东西”的地方:类型、函数、属性等。这一类关键字出现频率最高,几乎每段代码都会碰到,因为声明是写代码的第一步。
| 关键字 | 用途 |
|---|---|
class / struct / enum | 定义类 / 结构体 / 枚举 |
protocol / extension | 定义协议 / 扩展已有类型 |
func / init / deinit | 函数 / 构造器 / 析构器 |
let / var / subscript | 常量 / 变量 / 下标 |
import / typealias | 导入模块 / 类型别名 |
static / operator / precedencegroup | 类型成员 / 自定义运算符 / 优先级组 |
associatedtype / fileprivate / internal / private / public / open | 关联类型 / 各级访问控制 |
borrowing / consuming | Swift 5.9 引入(SE-0377):借入 / 消耗参数(所有权语义) |
nonisolated | 解除 actor 隔离限制(并发相关) |
inout / rethrows | 原地修改 / 可能重抛错误 |
1-3 语句用关键字
用在”控制流程”的地方。流程控制关键字决定了代码的执行路径,是程序逻辑的骨架所在。
| 关键字 | 用途 |
|---|---|
if / else / guard | 条件分支 / 提前退出 |
switch / case / default | 多分支匹配 |
for / while / repeat | 循环 |
break / continue / fallthrough | 跳出 / 跳下次 / 贯穿 |
return / throw / do / catch / defer | 返回 / 抛出 / 错误捕获 / 延迟清理 |
where / in | 约束条件 / 遍历绑定 |
1-4 表达式与类型关键字
出现在表达式或类型标注里。这些关键字大多在运行时才发挥作用,影响值的计算和类型的判定方式。
| 关键字 | 用途 |
|---|---|
as / is / try / await | 类型转换 / 类型判断 / 抛错调用 / 等待异步 |
throws / rethrows | 函数会抛错 / 可能重抛 |
nil / true / false | 空值 / 布尔两态 |
self / Self / super | 当前实例 / 当前类型 / 父类 |
Any | 任意类型(包括非类) |
1-5 模式与 # 开头关键字
_ 在模式里表示”忽略这个值”,比如 if let _ = optional。# 开头的多用于编译期指令:
| 关键字 | 用途 |
|---|---|
#if / #else / #elseif / #endif | 编译条件 |
#available / #unavailable | 平台/版本可用性判断 |
#selector / #keyPath | 选择器 / 键值路径 |
#file / #line / #function / #fileID | 位置信息宏 |
#sourceLocation | 改错误信息里的文件位置 |
1-6 上下文保留关键字
下面这些只在特定语法位置才当关键字,平时可作普通标识符:async、convenience、dynamic、final、get、indirect、infix、lazy、left、mutating、none、nonmutating、optional、override、package、postfix、precedence、prefix、Protocol、required、right、set、some、Type、unowned、weak、willSet、didSet、associativity。
其中 some 用于不透明类型(some Protocol),weak/unowned 管引用循环,lazy 做惰性属性,mutating 标可变方法,都是高频词。
1-7 运算符:算术与赋值
这部分是最常用的符号,建议优先记熟。它们多数也出现在别的语言里,迁移成本很低,所以上手快。Swift 的运算符设计沿袭了 C 系传统,但做了几处改进:移除了自增自减、新增了 nil 合并和区间运算符、引入了溢出运算符。
| 运算符 | 含义 | 示例 |
|---|---|---|
+ - * / | 加 减 乘 除 | a + b |
% | 取余 | 9 % 4 → 1 |
= | 赋值 | x = 5 |
+= -= *= /= %= | 复合赋值 | x += 1 |
注意 Swift 没有自增 ++、自减 --(早期版本有,已移除),要写 x += 1。
1-8 比较与逻辑
| 运算符 | 含义 |
|---|---|
== != | 相等 / 不等 |
< <= > >= | 大小比较 |
=== !== | 引用同一实例(类专属) |
! | 逻辑非 |
&& ` | |
? : | 三元条件 |
逻辑与或短路求值:左边已能定结果,右边不执行。这是写 a != nil && a!.count > 0 这类判断安全的前提。
1-9 区间、可选与类型转换
| 运算符 | 含义 |
|---|---|
... | 闭合区间 1...5 含 5 |
..< | 半开区间 1..<5 不含 5 |
?? | nil 合并,给默认值 |
? | 可选链 / 可选类型标记 |
! | 强制解包(危险) |
as as? as! | 转换 / 安全转换 / 强制转换 |
?? 和可选链 ?. 是日常最高频的”可选相关”符号,搭配能写出既安全又简洁的代码。
1-10 位运算与其他
| 运算符 | 含义 |
|---|---|
& ` | ^ ~` |
<< >> | 左移 / 右移 |
&+ &- &* | 溢出运算符(不报错,回绕) |
~= | 模式匹配(用于 switch 内部) |
溢出运算符在数值可能越界又想”绕回去”而非崩溃时用,普通业务别碰,容易出隐蔽 bug。
1-11 运算符优先级:谁先算
多个运算符写在一起,谁先执行有默认顺序。Swift 大致是:后缀(如 !、?)最高,然后是指数类、乘除取余、加减、区间、比较、等价、逻辑与、逻辑或、三元、赋值。具体记不住没关系,关键是”拿不准就加括号”——(a + b) * c 比依赖记忆可靠,也更易读。括号是唯一能覆盖默认优先级的手段,也是给读代码的人留提示的好习惯。
优先级冲突最常见的坑是逻辑与或混用:因为 && 高于 ||,a || b && c 实际是 a || (b && c)。想表达 (a || b) && c 必须显式加括号,否则逻辑完全走样。
1-12 已经移除或过时的写法
对照老教程时要小心,Swift 演化中删过一些语法:++/-- 自增自减已移除,改写 x += 1;C 风格 for (i = 0; i < n; i++) 循环已移除,用 for i in 0..<n;-- 这样的注释风格也没有。网上搜到的旧代码片段若含这些,编译会直接报错,别照抄。
另外早期用 #file、#line 当关键字,现在它们是标准库宏,写法还是 #file 但本质不同——你不能在别处把它们当保留字用,却能正常调用拿到位置信息。
1-13 怎么用这张表最高效
把它当字典,不是当课本。写代码时遇到”那个符号叫什么来着""这个关键字能干嘛”,直接 Ctrl+F 搜关键字或符号跳到对应小节。等用熟了,大部分会刻进肌肉记忆,只偶尔回来查那些低频的(比如 precedencegroup、indirect)。速查表的价值观在于”按需检索”而非”通读记忆”,所以不必纠结某个关键字一时想不起,知道在哪查就够了。
建议把本章和下一章(标准库类型)一起存书签,它们是全册最常被翻的两页。前面各章讲透原理,这两页负责”忘了秒查”。
1-14 小结
关键字按”声明 / 语句 / 表达式 / 模式 / #指令 / 上下文保留”六类记;运算符抓住算术赋值、比较逻辑、区间可选、位运算四条线,并留意优先级与已移除写法。写代码时这张表能省下大量回翻时间。下一章我们把常用标准库类型也压成速查。
需要补充一句:这份表是按”回忆用”设计的,不是语法全集。比如运算符还能自定义(用 operator + precedencegroup),关键字里还有宏相关的 #macro、#if 复杂用法,那些进阶内容前面章节已分别展开。遇到书上没列、又确实存在的符号,以官方词法规范或编译器报错为准——Swift 偶尔会为新特性加关键字,保持”查官方”的习惯比背这张表更可靠。