发布于 2015-06-14 01:56:05 | 103 次阅读 | 评论: 0 | 来源: 网络整理
取决于一个或者多个条件的值,分支语句允许程序执行指定部分的代码。显然,分支语句中条件的值将会决定如何分支以及执行哪一块代码。Swift 提供两种类型的分支语句:if
语句和switch
语句。
switch
语句中的控制流可以用break
语句修改,详情请见Break 语句。
取决于一个或多个条件的值,if
语句将决定执行哪一块代码。
if
语句有两种标准形式,在这两种形式里都必须有大括号。
第一种形式是当且仅当条件为真时执行代码,像下面这样:
if
condition
{
statements
}
第二种形式是在第一种形式的基础上添加 else 语句,当只有一个 else 语句时,像下面这样:
if
condition
{statements to execute if condition is true
} else {statements to execute if condition is false
}
同时,else 语句也可包含if
语句,从而形成一条链来测试更多的条件,像下面这样:
ifcondition 1
{
statements to execute if condition 1 is true
} else ifcondition 2
{
statements to execute if condition 2 is true
}
else {
statements to execute if both conditions are false
}
if
语句中条件的值的类型必须遵循LogicValue
协议。同时,条件也可以使用可选绑定,详情参见可选绑定。
If语句语法
if语句 → if if条件 代码块 else子句(Clause) 可选
if条件 → 表达式 | 声明
else子句(Clause) → else 代码块 | else if语句
取决于switch
语句的控制表达式(control expression),switch
语句将决定执行哪一块代码。
switch
语句的形式如下:
switchcontrol expression
{
casepattern 1
:
statements
casepattern 2
wherecondition
:
statements
casepattern 3
wherecondition
,
pattern 4
wherecondition
:
statements
default:
statements
}
switch
语句的控制表达式(control expression)会首先被计算,然后与每一个 case 的模式(pattern)进行匹配。如果匹配成功,程序将会执行对应的 case 分支里的 statements。另外,每一个 case 分支都不能为空,也就是说在每一个 case 分支中至少有一条语句。如果你不想在匹配到的 case 分支中执行代码,只需在该分支里写一条break
语句即可。
可以用作控制表达式的值是十分灵活的,除了标量类型(scalar types,如Int
、Character
)外,你可以使用任何类型的值,包括浮点数、字符串、元组、自定义类的实例和可选(optional)类型,甚至是枚举类型中的成员值和指定的范围(range)等。关于在switch
语句中使用这些类型,详情参见控制流一章的 Switch。
你可以在模式后面添加一个起保护作用的表达式(guard expression)。起保护作用的表达式是这样构成的:关键字where
后面跟着一个作为额外测试条件的表达式。因此,当且仅当控制表达式匹配一个case的某个模式且起保护作用的表达式为真时,对应 case 分支中的 statements 才会被执行。在下面的例子中,控制表达式只会匹配含两个相等元素的元组,如(1, 1)
:
case let (x, y) where x == y:
正如上面这个例子,也可以在模式中使用let
(或var
)语句来绑定常量(或变量)。这些常量(或变量)可以在其对应的起保护作用的表达式和其对应的case块里的代码中引用。但是,如果 case 中有多个模式匹配控制表达式,那么这些模式都不能绑定常量(或变量)。
switch
语句也可以包含默认(default
)分支,只有其它 case 分支都无法匹配控制表达式时,默认分支中的代码才会被执行。一个switch
语句只能有一个默认分支,而且必须在switch
语句的最后面。
尽管模式匹配操作实际的执行顺序,特别是模式的计算顺序是不可知的,但是 Swift 规定switch
语句中的模式匹配的顺序和书写源代码的顺序保持一致。因此,当多个模式含有相同的值且能够匹配控制表达式时,程序只会执行源代码中第一个匹配的 case 分支中的代码。
在 Swift 中,switch
语句中控制表达式的每一个可能的值都必须至少有一个 case 分支与之对应。在某些情况下(例如,表达式的类型是Int
),你可以使用默认块满足该要求。
当匹配的 case 分支中的代码执行完毕后,程序会终止switch
语句,而不会继续执行下一个 case 分支。这就意味着,如果你想执行下一个 case 分支,需要显式地在你需要的 case 分支里使用fallthrough
语句。关于fallthrough
语句的更多信息,详情参见 Fallthrough 语句。
Switch语句语法
switch语句 → switch 表达式 { SwitchCase列表 可选 }
SwitchCase列表 → SwitchCase SwitchCase列表 可选
SwitchCase → case标签 多条语句(Statements) | default标签 多条语句(Statements)
SwitchCase → case标签 ; | default标签 ;
case标签 → case case项列表 :
case项列表 → 模式 guard-clause 可选 | 模式 guard-clause 可选 , case项列表
default标签 → default :
guard-clause → where guard-expression
guard-expression → 表达式