首页 / Swift 编程语言教程 / 语法速查附录

Swift 编程语言教程

语法速查附录

本教程共 93 篇 · 第 92 篇 · 更新于 2026-08-08 · 约 6 分钟阅读

SwiftSwift 编程语言教程关键字运算符速查Swift 6.3

本节目标:手边放一份 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 / consumingSwift 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 上下文保留关键字

下面这些只在特定语法位置才当关键字,平时可作普通标识符:asyncconveniencedynamicfinalgetindirectinfixlazyleftmutatingnonenonmutatingoptionaloverridepackagepostfixprecedenceprefixProtocolrequiredrightsetsomeTypeunownedweakwillSetdidSetassociativity

其中 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 搜关键字或符号跳到对应小节。等用熟了,大部分会刻进肌肉记忆,只偶尔回来查那些低频的(比如 precedencegroupindirect)。速查表的价值观在于”按需检索”而非”通读记忆”,所以不必纠结某个关键字一时想不起,知道在哪查就够了。

建议把本章和下一章(标准库类型)一起存书签,它们是全册最常被翻的两页。前面各章讲透原理,这两页负责”忘了秒查”。

1-14 小结

关键字按”声明 / 语句 / 表达式 / 模式 / #指令 / 上下文保留”六类记;运算符抓住算术赋值、比较逻辑、区间可选、位运算四条线,并留意优先级与已移除写法。写代码时这张表能省下大量回翻时间。下一章我们把常用标准库类型也压成速查。

需要补充一句:这份表是按”回忆用”设计的,不是语法全集。比如运算符还能自定义(用 operator + precedencegroup),关键字里还有宏相关的 #macro#if 复杂用法,那些进阶内容前面章节已分别展开。遇到书上没列、又确实存在的符号,以官方词法规范或编译器报错为准——Swift 偶尔会为新特性加关键字,保持”查官方”的习惯比背这张表更可靠。