发布于 2015-06-14 01:56:05 | 103 次阅读 | 评论: 0 | 来源: 网络整理

分支语句

取决于一个或者多个条件的值,分支语句允许程序执行指定部分的代码。显然,分支语句中条件的值将会决定如何分支以及执行哪一块代码。Swift 提供两种类型的分支语句:if语句和switch语句。

switch语句中的控制流可以用break语句修改,详情请见Break 语句


分支语句语法
分支语句 → if语句
分支语句 → switch语句
 

If 语句

取决于一个或多个条件的值,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语句,从而形成一条链来测试更多的条件,像下面这样:


if condition 1 {
statements to execute if condition 1 is true
} else if condition 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 语句

取决于switch语句的控制表达式(control expression)switch语句将决定执行哪一块代码。

switch语句的形式如下:


switch control expression {
case pattern 1:
statements
case pattern 2 where condition:
statements
case pattern 3 where condition,
pattern 4 where condition:
statements
default:
statements
}
 

switch语句的控制表达式(control expression)会首先被计算,然后与每一个 case 的模式(pattern)进行匹配。如果匹配成功,程序将会执行对应的 case 分支里的 statements。另外,每一个 case 分支都不能为空,也就是说在每一个 case 分支中至少有一条语句。如果你不想在匹配到的 case 分支中执行代码,只需在该分支里写一条break语句即可。

可以用作控制表达式的值是十分灵活的,除了标量类型(scalar types,如IntCharacter)外,你可以使用任何类型的值,包括浮点数、字符串、元组、自定义类的实例和可选(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 分支中的代码。

Switch 语句必须是完备的

在 Swift 中,switch语句中控制表达式的每一个可能的值都必须至少有一个 case 分支与之对应。在某些情况下(例如,表达式的类型是Int),你可以使用默认块满足该要求。

不存在隐式的贯穿(fall through)

当匹配的 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 → 表达式
 

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务