Swift Tips 010 - Avoiding default cases in switch statements

每天了解一点不一样的 Swift 小知识

代码截图

小笔记

这段代码在说什么

Swift 里的 Switch 语句不同于 Objective-C 里的 Switch 语句,在 Swift 中,Switch 语句必须是完备的。

这就是说,每一个可能的值都必须至少有一个 case 分支与之对应。在某些不可能涵盖所有值的情况下,你可以使用默认(default)分支来涵盖其它所有没有对应的值,这个默认分支必须在 switch 语句的最后面。

当无法满足完备性时,编译器会提示错误。例如代码截图里的 onboarding 情况就没有被覆盖到,所以这时候编译器就会报错。

Swift 的这个特性让错误代码在开发期间就能被暴露出来,从而提升了运行时的稳定性。

简化无意义的 default 分支代码

虽然 Swift 这种强制你必须覆盖所有情况的写法提升了代码的健壮性,但是有时候还是会让人觉得有点闹心。

比如下面这段代码,因为 default 分支不会做任何事,但是又碍于编译器报错,你不能删掉 default 语句,只能在 default 后面写上一条无意义的代码,八成最后的代码会长成下面这个样子:

let name = "SketchK"
switch name {
case "SketchK": print("Hello, SketchK")
default: print("Do Nothing")
}

那么有更简洁的写法么?答案是当然有,我们只需要在 default: 后面加上一组小括号即可。

switch name {
case "SketchK": print("Hello, SketchK")
default: ()
}