知识卡片

switch必须全覆盖且默认不穿透

专业/工作 · 741

内容

Swift的switch语句要求所有分支合起来必须覆盖被检查类型的每一个可能值(没有对应分支就编译不通过,除非提供default分支兜底),且一个分支匹配后默认执行完就停止,不会像C/Objective-C那样自动穿透到下一个分支——需要穿透必须显式写fallthrough。这两条规则都是把”某个分支被遗漏”或”忘了写break导致意外执行到下一分支”这类隐蔽bug,从运行时提前逼到编译期暴露。发散:与[[整数溢出默认触发陷阱]]是同一条设计主线——凡是容易被无意遗漏的情况,Swift倾向于让编译器强制你正面处理,而不是依赖程序员的自觉。

参考来源

《Swift编程权威指南》第5章《switch语句》