@ -21,8 +21,8 @@
< link rel = "prev" href = "../chapter3/04_Expressions.html" / >
< meta property = "og:title" content = "语句 | 这一次,让中国和世界同步 " >
< meta property = "og:site_name" content = "这一次,让中国和世界同步 " >
< meta property = "og:title" content = "语句 | Swift 编程语言 " >
< meta property = "og:site_name" content = "Swift 编程语言 " >
< meta property = "og:type" content = "book" >
< meta property = "og:locale" content = "en_US" >
@ -46,7 +46,7 @@
< div class = "book" data-level = "3.5" data-basepath = ".." data-revision = "140252308759 8" >
< div class = "book" data-level = "3.5" data-basepath = ".." data-revision = "140255047851 8" >
< div class = "book-header" >
<!-- Actions Left -->
< a href = "#" class = "btn pull-left toggle-summary" aria-label = "Toggle summary" > < i class = "fa fa-align-justify" > < / i > < / a >
@ -98,7 +98,7 @@
<!-- Title -->
< h1 >
< i class = "fa fa-spinner fa-spin" > < / i >
< a href = "../" > 这一次,让中国和世界同步 < / a >
< a href = "../" > Swift 编程语言 < / a >
< / h1 >
< / div >
@ -587,11 +587,11 @@
< div class = "page-inner" >
< section class = "normal" id = "section-gitbook_6535 " >
< section class = "normal" id = "section-gitbook_162 " >
< blockquote >
< p > 翻译: coverxit< / p >
< p > 校对: numbbbbb< / p >
< p > 校对: numbbbbb, coverxit < / p >
< / blockquote >
< h1 id = "-" > 语句< / h1 >
< hr >
@ -604,7 +604,7 @@
< / ul >
< p > 在 Swift 中, 有两种类型的语句: 简单语句和控制流语句。简单语句是最常见的, 用于构造表达式和声明。控制流语句则用于控制程序执行的流程, Swift 中有三种类型的控制流语句:循环语句、分支语句和控制传递语句。< / p >
< p > 循环语句用于重复执行代码块;分支语句用于执行满足特定条件的代码块;控制传递语句则用于修改代码的执行顺序。在稍后的叙述中,将会详细地介绍每一种类型的控制流语句。< / p >
< p > 是否将分号(;) 添加到语句的结尾处是可选的。但若要在同一行内写多条独立语句,请务必使用分号。< / p >
< p > 是否将分号( < code > ;< / code > ) 添加到语句的结尾处是可选的。但若要在同一行内写多条独立语句,请务必使用分号。< / p >
< blockquote >
< p > GRAMMAR OF A STATEMENT< / p >
< p > < em > statement< / em > → < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Expressions.html#//apple_ref/swift/grammar/expression" target = "_blank" > < em > expression< / em > < / a > < strong > ;< / strong > < em > opt< / em > < / p >
@ -618,7 +618,7 @@
< p > < a name = "loop_statements" > < / a > < / p >
< h2 id = "-" > 循环语句< / h2 >
< p > 取决于特定的循环条件, 循环语句允许重复执行代码块。Swift 提供四种类型的循环语句:< code > for< / code > 语句、< code > for-in< / code > 语句、< code > while< / code > 语句和< code > do-while< / code > 语句。< / p >
< p > 通过< code > break< / code > 语句和< code > continue< / code > 语句可以改变循环语句的控制流。有关这两条语句,请参考 < a href = "#break_statement" > Break 语句< / a > 和< a href = "#continue_statement" > Continue 语句< / a > 。< / p >
< p > 通过< code > break< / code > 语句和< code > continue< / code > 语句可以改变循环语句的控制流。有关这两条语句,详情参见 < a href = "#break_statement" > Break 语句< / a > 和 < a href = "#continue_statement" > Continue 语句< / a > 。< / p >
< blockquote >
< p > GRAMMAR OF A LOOP STATEMENT< / p >
< p > < em > loop-statement< / em > → < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/for-statement" target = "_blank" > < em > for-statement< / em > < / a > < / p >
@ -633,18 +633,18 @@
`statements`
}
< / code > < / pre >
< p > < em > initialzation< / em > 、< em > condition< / em > 和 < em > increment< / em > 之间的分号,以及包围循环体< em > statements< / em > 的大括号都是不可省略的。< / p >
< p > < em > initialzation< / em > 、< em > condition< / em > 和 < em > increment< / em > 之间的分号,以及包围循环体 < em > statements< / em > 的大括号都是不可省略的。< / p >
< p > < code > for< / code > 语句的执行流程如下:< / p >
< ol >
< li > < p > < em > initialzation< / em > 只会被执行一次,通常用于声明和初始化在接下来的循环中需要使用的变量。< / p >
< li > < p > < em > initialzation< / em > 只会被执行一次,通常用于声明和初始化在接下来的循环中需要使用的变量。< / p >
< / li >
< li > < p > 计算< em > condition< / em > 表达式:
如果为真( < code > true< / code > ) , < em > statements< / em > 将会被执行, 然后转到第3步。如果为假( < code > false< / code > ) , < em > statements< / em > 和 < em > increment< / em > 都不会被执行,< code > for< / code > 至此执行完毕。< / p >
< li > < p > 计算 < em > condition< / em > 表达式:
如果为< code > true< / code > , < em > statements< / em > 将会被执行, 然后转到第3步。如果为< code > false< / code > , < em > statements< / em > 和 < em > increment< / em > 都不会被执行,< code > for< / code > 至此执行完毕。< / p >
< / li >
< li > < p > 计算< em > increment< / em > 表达式, 然后转到第2步。< / p >
< li > < p > 计算 < em > increment< / em > 表达式, 然后转到第2步。< / p >
< / li >
< / ol >
< p > 定义在< em > initialzation< / em > 中的变量仅在< code > for< / code > 语句的作用域以内有效。< em > condition< / em > 表达式的值的类型必须遵循< code > LogicValue< / code > 协议。< / p >
< p > 定义在 < em > initialzation< / em > 中的变量仅在< code > for< / code > 语句的作用域以内有效。< em > condition< / em > 表达式的值的类型必须遵循< code > LogicValue< / code > 协议。< / p >
< blockquote >
< p > GRAMMAR OF A FOR STATEMENT< / p >
< p > < em > for-statement< / em > → < strong > for< / strong > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/for-init" target = "_blank" > < em > for-init< / em > < / a > < em > opt< / em > < strong > ;< / strong > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Expressions.html#//apple_ref/swift/grammar/expression" target = "_blank" > < em > expression< / em > < / a > < em > opt< / em > < strong > ;< / strong > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Expressions.html#//apple_ref/swift/grammar/expression" target = "_blank" > < em > expression< / em > < / a > < em > opt< / em > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/code-block" target = "_blank" > < em > code-block< / em > < / a > < / p >
@ -652,13 +652,13 @@
< p > < em > for-statement< / em > → < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/variable-declaration" target = "_blank" > < em > variable-declaration< / em > < / a > | < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Expressions.html#//apple_ref/swift/grammar/expression-list" target = "_blank" > < em > expression-list< / em > < / a > < / p >
< / blockquote >
< h3 id = "for-in-" > For-In 语句< / h3 >
< p > < code > for-in< / code > 语句允许在重复执行代码块的同时,迭代集合( 或遵循< code > Sequence< / code > 协议的任意类型) 中的每一项。< / p >
< p > < code > for-in< / code > 语句允许在重复执行代码块的同时,迭代集合( 或遵循< code > Sequence< / code > 协议的任意类型) 中的每一项。< / p >
< p > < code > for-in< / code > 语句的形式如下:< / p >
< pre > < code class = "lang-swift" > for `item` in `collection` {
`statements`
}
< / code > < / pre >
< p > < code > for-in< / code > 语句在循环开始前会调用< em > collection< / em > 表达式的< code > generate< / code > 方法来获取一个生成器类型(这是一个遵循< code > Generator< / code > 协议的类型)的值。接下来循环开始,调用< em > collection< / em > 表达式的< code > next< / code > 方法。如果其返回值不是< code > None< / code > ,它将会被赋给< em > item< / em > ,然后执行< em > statements< / em > ,执行完毕后回到循环开始处;否则,将不会赋值给< em > item< / em > 也不会执行< em > statements< / em > , < code > for-in< / code > 至此执行完毕。< / p >
< p > < code > for-in< / code > 语句在循环开始前会调用 < em > collection< / em > 表达式的< code > generate< / code > 方法来获取一个生成器类型(这是一个遵循< code > Generator< / code > 协议的类型)的值。接下来循环开始,调用 < em > collection< / em > 表达式的< code > next< / code > 方法。如果其返回值不是< code > None< / code > ,它将会被赋给 < em > item< / em > ,然后执行 < em > statements< / em > ,执行完毕后回到循环开始处;否则,将不会赋值给 < em > item< / em > 也不会执行 < em > statements< / em > , < code > for-in< / code > 至此执行完毕。< / p >
< blockquote >
< p > GRAMMAR OF A FOR-IN STATEMENT< / p >
< p > < em > for-in-statement< / em > → < strong > for< / strong > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Patterns.html#//apple_ref/swift/grammar/pattern" target = "_blank" > < em > pattern< / em > < / a > < strong > in< / strong > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Expressions.html#//apple_ref/swift/grammar/expression" target = "_blank" > < em > expression< / em > < / a > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/code-block" target = "_blank" > < em > code-block< / em > < / a > < / p >
@ -672,14 +672,14 @@
< / code > < / pre >
< p > < code > while< / code > 语句的执行流程如下:< / p >
< ol >
< li > < p > 计算< em > condition< / em > 表达式:
如果为真( < code > true< / code > ) , 转到第2步。如果为假( < code > false< / code > ) , < code > while< / code > 至此执行完毕。< / p >
< li > < p > 计算 < em > condition< / em > 表达式:
如果为真< code > true< / code > , 转到第2步。如果为< code > false< / code > , < code > while< / code > 至此执行完毕。< / p >
< / li >
< li > < p > 执行< em > statements< / em > , 然后转到第1步。< / p >
< li > < p > 执行 < em > statements< / em > , 然后转到第1步。< / p >
< / li >
< / ol >
< p > 由于< em > condition< / em > 的值在< em > statements< / em > 执行前就已计算出,因此< code > while< / code > 语句中的< em > statements< / em > 可能会被执行若干次,也可能不会被执行。< / p >
< p > < em > condition< / em > 表达式的值的类型必须遵循< code > LogicValue< / code > 协议。同时,< em > condition< / em > 表达式也可以使用可选绑定,请参考 < a href = "" > 可选绑定< code > 待添加链接< / code > < / a > 。< / p >
< p > 由于 < em > condition< / em > 的值在 < em > statements< / em > 执行前就已计算出,因此< code > while< / code > 语句中的 < em > statements< / em > 可能会被执行若干次,也可能不会被执行。< / p >
< p > < em > condition< / em > 表达式的值的类型必须遵循< code > LogicValue< / code > 协议。同时,< em > condition< / em > 表达式也可以使用可选绑定,详情参见 < a href = "../chapter2/01_The_Basics.html#optional_binding " > 可选绑定< / a > 。< / p >
< blockquote >
< p > GRAMMAR OF A WHILE STATEMENT< / p >
< p > < em > while-statement< / em > → < strong > while< / strong > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/while-condition" target = "_blank" > < em > while-condition< / em > < / a > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/code-block" target = "_blank" > < em > code-block< / em > < / a > < / p >
@ -694,14 +694,14 @@
< / code > < / pre >
< p > < code > do-while< / code > 语句的执行流程如下:< / p >
< ol >
< li > < p > 执行< em > statements< / em > , 然后转到第2步。< / p >
< li > < p > 执行 < em > statements< / em > , 然后转到第2步。< / p >
< / li >
< li > < p > 计算< em > condition< / em > 表达式:
如果为真( < code > true< / code > ) , 转到第1步。如果为假( < code > false< / code > ) , < code > do-while< / code > 至此执行完毕。< / p >
< li > < p > 计算 < em > condition< / em > 表达式:
如果为< code > true< / code > , 转到第1步。如果为< code > false< / code > , < code > do-while< / code > 至此执行完毕。< / p >
< / li >
< / ol >
< p > 由于< em > condition< / em > 表达式的值是在< em > statements< / em > 表达式 执行后才计算出,因此< em > do-while< / em > 语句中的< em > statements< / em > 至少会被执行一次。< / p >
< p > < em > condition< / em > 表达式的值的类型必须遵循< code > LogicValue< / code > 协议。同时,< em > condition< / em > 表达式也可以使用可选绑定,请参考 < a href = "" > 可选绑定< code > 待添加链接< / code > < / a > 。< / p >
< p > 由于 < em > condition< / em > 表达式的值是在 < em > statements< / em > 执行后才计算出,因此< cod e> do-while< / cod e> 语句中的 < em > statements< / em > 至少会被执行一次。< / p >
< p > < em > condition< / em > 表达式的值的类型必须遵循< code > LogicValue< / code > 协议。同时,< em > condition< / em > 表达式也可以使用可选绑定,详情参见 < a href = "../chapter2/01_The_Basics.html#optional_binding " > 可选绑定< / a > 。< / p >
< blockquote >
< p > GRAMMAR OF A DO-WHILE STATEMENT< / p >
< p > < em > do-while-statement< / em > → < strong > do< / strong > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/code-block" target = "_blank" > < em > code-block< / em > < / a > < strong > while< / strong > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/while-condition" target = "_blank" > < em > while-condition< / em > < / a > < / p >
@ -709,7 +709,7 @@
< p > < a name = "branch_statements" > < / a > < / p >
< h2 id = "-" > 分支语句< / h2 >
< p > 取决于一个或者多个条件的值, 分支语句允许程序执行指定部分的代码。显然, 分支语句中条件的值将会决定如何分支以及执行哪一块代码。Swift 提供两种类型的分支语句:< code > if< / code > 语句和< code > switch< / code > 语句。< / p >
< p > < code > switch< / code > 语句中的控制流可以用< code > break< / code > 语句修改,请参考 < a href = "#break_statement" > Break 语句< / a > 。< / p >
< p > < code > switch< / code > 语句中的控制流可以用< code > break< / code > 语句修改,详情请见 < a href = "#break_statement" > Break 语句< / a > 。< / p >
< blockquote >
< p > GRAMMAR OF A BRANCH STATEMENT< / p >
< p > < em > branch-statement< / em > → < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/if-statement" target = "_blank" > < em > if-statement< / em > < / a > < / p >
@ -723,14 +723,14 @@
`statements`
}
< / code > < / pre >
< p > 第二种形式是在第一种形式的基础上添加< em > else语句< / em > ,当只有一个< em > else语句< / em > 时,像下面这样:< / p >
< p > 第二种形式是在第一种形式的基础上添加 < em > else 语句< / em > ,当只有一个 else 语句时,像下面这样:< / p >
< pre > < code class = "lang-swift" > if `condition` {
`statements to execute if condition is true`
} else {
`statements to execute if condition is false`
}
< / code > < / pre >
< p > 同时,< em > else语句< / em > 也可包含< code > if< / code > 语句,从而形成一条链来测试更多的条件,像下面这样:< / p >
< p > 同时, else 语句也可包含< code > if< / code > 语句,从而形成一条链来测试更多的条件,像下面这样:< / p >
< pre > < code class = "lang-swift" > if `condition 1` {
`statements to execute if condition 1 is true`
} else if `condition 2` {
@ -740,7 +740,7 @@ else {
`statements to execute if both conditions are false`
}
< / code > < / pre >
< p > < code > if< / code > 语句中条件的值的类型必须遵循< code > LogicValue< / code > 协议。同时,条件也可以使用可选绑定,请参考 < a href = "" > 可选绑定< code > 待添加链接< / code > < / a > 。< / p >
< p > < code > if< / code > 语句中条件的值的类型必须遵循< code > LogicValue< / code > 协议。同时,条件也可以使用可选绑定,详情参见 < a href = "../chapter2/01_The_Basics.html#optional_binding " > 可选绑定< / a > 。< / p >
< blockquote >
< p > GRAMMAR OF AN IF STATEMENT< / p >
< p > < em > if-statement< / em > → < strong > if< / strong > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/if-condition" target = "_blank" > < em > if-condition< / em > < / a > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/code-block" target = "_blank" > < em > code-block< / em > < / a > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/else-clause" target = "_blank" > < em > else-clause< / em > < / a > < em > opt< / em > < / p >
@ -748,7 +748,7 @@ else {
< p > < em > else-clause< / em > → < strong > else< / strong > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/code-block" target = "_blank" > < em > code-block< / em > < / a > | < strong > else< / strong > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/if-statement" target = "_blank" > < em > if-statement< / em > < / a > < em > opt< / em > < / p >
< / blockquote >
< h3 id = "switch-" > Switch 语句< / h3 >
< p > 取决于< code > switch< / code > 语句的控制表达式( < em > control expression< / em > ) , < code > switch< / code > 语句将决定执行哪一块代码。< / p >
< p > 取决于< code > switch< / code > 语句的< em > 控制表达式( control expression) < / em > , < code > switch< / code > 语句将决定执行哪一块代码。< / p >
< p > < code > switch< / code > 语句的形式如下:< / p >
< pre > < code class = "lang-swift" > switch `control expression` {
case `pattern 1`:
@ -762,19 +762,18 @@ else {
`statements`
}
< / code > < / pre >
< p > < code > switch< / code > 语句的< em > 控制表达式( control expression) < / em > 会首先被计算,然后与每一个< em > case< / em > 的模式( pattern) 进行匹配。如果匹配成功,程序将会执行对应的< em > case< / em > 块 里的< em > statements< / em > 。另外,每一个< em > case< / em > 块都不能为空,也就是说在每一个< em > case< / em > 块中至少有一条语句。如果你不想在匹配到的< em > case< / em > 块 中执行代码,只需在块 里写一条< code > break< / code > 语句即可。< / p >
< p > 可以用作控制表达式的值是十分灵活的,除了标量类型(scalar types, 如< code > Int< / code > 、< code > Character< / code > )外,你可以使用任何类型的值,包括浮点数、字符串、元组、自定义类的实例和可选( optional) 类型,甚至是枚举类型中的成员值和指定的范围(range)等。关于在< code > switch< / code > 语句中使用这些类型,请参考 < a href = "../chapter2/05_Control_Flow.html" > 控制流< / a > 一章的< a href = "../chapter2/05_Control_Flow.html#switch" > Switch< / a > 。< / p >
< p > 你可以在模式后面添加一个起保护作用的表达式(guard expression)。< em > 起保护作用的表达式< / em > 是这样构成的:关键字< code > where< / code > 后面跟着一个作为额外测试条件的表达式。因此,当且仅当< em > 控制表达式< / em > 匹配一个< em > case< / em > 的某个模式且起保护作用的表达式为真时,对应< em > case< / em > 块 中的< em > statements< / em > 才会被执行。在下面的例子中,< em > 控制表达式< / em > 只会匹配含两个相等元素的元组,如< code > (1, 1)< / code > : < / p >
< p > < code > switch< / code > 语句的< em > 控制表达式( control expression) < / em > 会首先被计算,然后与每一个 case 的模式( pattern) 进行匹配。如果匹配成功,程序将会执行对应的 case 分支 里的 < em > statements< / em > 。另外,每一个 case 分支都不能为空,也就是说在每一个 case 分支中至少有一条语句。如果你不想在匹配到的 case 分支 中执行代码,只需在该分支 里写一条< code > break< / code > 语句即可。< / p >
< p > 可以用作控制表达式的值是十分灵活的,除了标量类型(scalar types, 如< code > Int< / code > 、< code > Character< / code > )外,你可以使用任何类型的值,包括浮点数、字符串、元组、自定义类的实例和可选( optional) 类型,甚至是枚举类型中的成员值和指定的范围(range)等。关于在< code > switch< / code > 语句中使用这些类型,详情参见 < a href = "../chapter2/05_Control_Flow.html" > 控制流< / a > 一章的 < a href = "../chapter2/05_Control_Flow.html#switch" > Switch< / a > 。< / p >
< p > 你可以在模式后面添加一个起保护作用的表达式(guard expression)。< em > 起保护作用的表达式< / em > 是这样构成的:关键字< code > where< / code > 后面跟着一个作为额外测试条件的表达式。因此,当且仅当< em > 控制表达式< / em > 匹配一个< em > case< / em > 的某个模式且起保护作用的表达式为真时,对应 case 分支 中的 < em > statements< / em > 才会被执行。在下面的例子中,< em > 控制表达式< / em > 只会匹配含两个相等元素的元组,如< code > (1, 1)< / code > : < / p >
< pre > < code class = "lang-swift" > case let (x, y) where x == y:
}
< / code > < / pre >
< p > 正如上面这个例子,也可以在模式中使用< code > let< / code > (或< code > var< / code > )语句来绑定常量(或变量)。这些常量(或变量)可以在其对应的起保护作用的表达式和其对应的< em > case< / em > 块里的代码中引用。但是,如果< em > case< / em > 中有多个模式匹配控制表达式,那么这些模式都不能绑定常量(或变量)。< / p >
< p > < code > switch< / code > 语句也可以包含默认( < code > default< / code > )块 ,只有其它< em > case< / em > 块 都无法匹配控制表达式时,默认块 中的代码才会被执行。一个< code > switch< / code > 语句只能有一个默认块 ,而且必须在< code > switch< / code > 语句的最后面。< / p >
< p > 尽管模式匹配操作实际的执行顺序,特别是模式的计算顺序是不可知的,但是 Swift 规定< code > switch< / code > 语句中的模式匹配的顺序和书写源代码的顺序保持一致。因此,当多个模式含有相同的值且能够匹配控制表达式时,程序只会执行源代码中第一个匹配的< em > case< / em > 块 中的代码。< / p >
< p > 正如上面这个例子,也可以在模式中使用< code > let< / code > (或< code > var< / code > )语句来绑定常量(或变量)。这些常量(或变量)可以在其对应的起保护作用的表达式和其对应的< em > case< / em > 块里的代码中引用。但是,如果 case 中有多个模式匹配控制表达式,那么这些模式都不能绑定常量(或变量)。< / p >
< p > < code > switch< / code > 语句也可以包含默认( < code > default< / code > )分支 ,只有其它 case 分支 都无法匹配控制表达式时,默认分支 中的代码才会被执行。一个< code > switch< / code > 语句只能有一个默认分支 ,而且必须在< code > switch< / code > 语句的最后面。< / p >
< p > 尽管模式匹配操作实际的执行顺序,特别是模式的计算顺序是不可知的,但是 Swift 规定< code > switch< / code > 语句中的模式匹配的顺序和书写源代码的顺序保持一致。因此,当多个模式含有相同的值且能够匹配控制表达式时,程序只会执行源代码中第一个匹配的 case 分支 中的代码。< / p >
< h4 id = "switch-" > Switch 语句必须是完备的< / h4 >
< p > 在 Swift 中,< code > switch< / code > 语句中控制表达式的每一个可能的值都必须至少有一个< em > case< / em > 块 与之对应。在某些情况下(例如,表达式的类型是< code > Int< / code > ),你可以使用默认块满足该要求。< / p >
< p > 在 Swift 中,< code > switch< / code > 语句中控制表达式的每一个可能的值都必须至少有一个 case 分支 与之对应。在某些情况下(例如,表达式的类型是< code > Int< / code > ),你可以使用默认块满足该要求。< / p >
< h4 id = "-fall-through-" > 不存在隐式的贯穿(fall through)< / h4 >
< p > 当匹配的< em > case< / em > 块 中的代码执行完毕后,程序会终止< code > switch< / code > 语句,而不会继续执行下一个< em > case< / em > 块。这就意味着,如果你想执行下一个< em > case< / em > 块,需要显式地在你需要的< em > case< / em > 块 里使用< code > fallthrough< / code > 语句。关于< code > fallthrough< / code > 语句的更多信息,请参考 < a href = "#fallthrough_statement" > Fallthrough 语句< / a > 。< / p >
< p > 当匹配的 case 分支 中的代码执行完毕后,程序会终止< code > switch< / code > 语句,而不会继续执行下一个 case 分支。这就意味着,如果你想执行下一个 case 分支,需要显式地在你需要的 case 分支 里使用< code > fallthrough< / code > 语句。关于< code > fallthrough< / code > 语句的更多信息,详情参见 < a href = "#fallthrough_statement" > Fallthrough 语句< / a > 。< / p >
< blockquote >
< p > GRAMMAR OF A SWITCH STATEMENT< / p >
< p > < em > switch-statement< / em > → < strong > switch< / strong > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Expressions.html#//apple_ref/swift/grammar/expression" target = "_blank" > < em > expression< / em > < / a > < strong > {< / strong > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/switch-cases" target = "_blank" > < em > switch-cases< / em > < / a > < em > opt< / em > < strong > }< / strong > < / p >
@ -789,9 +788,9 @@ else {
< / blockquote >
< p > < a name = "labeled_statement" > < / a >
< a name = "control_transfer_statements" > < / a > 带标签的语句< / p >
< p > 你可以在循环语句或< code > switch< / code > 语句前面加上< em > 标签< / em > ,它由标签名和紧随其后的冒号(:)组成。在< code > break< / code > 和< code > continue< / code > 后面跟上标签名可以显式地在循环语句或< code > switch< / code > 语句中更改控制流,把控制权传递给指定标签标记的语句。关于这两条语句用法,请参考 < a href = "#break_statement" > Break 语句< / a > 和< a href = "#continue_statement" > Continue 语句< / a > 。< / p >
< p > 你可以在循环语句或< code > switch< / code > 语句前面加上< em > 标签< / em > ,它由标签名和紧随其后的冒号(:)组成。在< code > break< / code > 和< code > continue< / code > 后面跟上标签名可以显式地在循环语句或< code > switch< / code > 语句中更改控制流,把控制权传递给指定标签标记的语句。关于这两条语句用法,详情参见 < a href = "#break_statement" > Break 语句< / a > 和 < a href = "#continue_statement" > Continue 语句< / a > 。< / p >
< p > 标签的作用域是该标签所标记的语句之后的所有语句。你可以不使用带标签的语句,但只要使用它,标签名就必唯一。< / p >
< p > 关于使用带标签的语句的例子,请参考 < a href = "../chapter2/05_Control_Flow.html" > 控制流< / a > 一章的< a href = "" > 带标签的语句< code > 待添加链接< / code > < / a > 。< / p >
< p > 关于使用带标签的语句的例子,详情参见 < a href = "../chapter2/05_Control_Flow.html" > 控制流< / a > 一章的< a href = "../chapter2/05_Control_Flow.html#labeled_statements " > 带标签的语句< / a > 。< / p >
< blockquote >
< p > GRAMMAR OF A LABELED STATEMENT< / p >
< p > < em > labeled-statement< / em > → < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/statement-label" target = "_blank" > < em > statement-label< / em > < / a > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/loop-statement" target = "_blank" > < em > loop-statement< / em > < / a > | < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/statement-label" target = "_blank" > < em > statement-label< / em > < / a > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/switch-statement" target = "_blank" > < em > switch-statement< / em > < / a > < / p >
@ -809,38 +808,38 @@ else {
< / blockquote >
< p > < a name = "break_statement" > < / a > < / p >
< h3 id = "break-" > Break 语句< / h3 >
< p > < code > break< / code > 语句用于终止循环或< code > switch< / code > 语句的执行。使用< code > break< / code > 语句时,可以只写< code > break< / code > 这个关键词,也可以在< code > break< / code > 后面跟上标签名( label name) ,像下面这样:< / p >
< p > < code > break< / code > 语句用于终止循环或< code > switch< / code > 语句的执行。使用< code > break< / code > 语句时,可以只写< code > break< / code > 这个关键词,也可以在< code > break< / code > 后面跟上标签名( label name) ,像下面这样:< / p >
< pre > < code class = "lang-swift" > break
break `label name`
< / code > < / pre >
< p > 当< code > break< / code > 语句后面带标签名时,可用于终止由这个标签标记的循环或< code > switch< / code > 语句的执行。< / p >
< p > 而当只写< code > break< / code > 时,则会终止< code > switch< / code > 语句或上下文中包含< code > break< / code > 语句的最内层循环的执行。< / p >
< p > 在这两种情况下,控制权都会被传递给循环或< code > switch< / code > 语句外面的第一行语句。< / p >
< p > 关于使用< code > break< / code > 语句的例子,请参考 < a href = "../chapter2/05_Control_Flow.html" > 控制流< / a > 一章的< a href = "" > Break< code > 待添加链接< / code > < / a > 和< a href = "" > 带标签的语句< code > 待添加链接< / code > < / a > 。< / p >
< p > 关于使用< code > break< / code > 语句的例子,详情参见 < a href = "../chapter2/05_Control_Flow.html" > 控制流< / a > 一章的 < a href = "../chapter2/05_Control_Flow.html#break " > Break< / a > 和< a href = "../chapter2/05_Control_Flow.html#labeled_statements " > 带标签的语句< / a > 。< / p >
< blockquote >
< p > GRAMMAR OF A BREAK STATEMENT< / p >
< p > < em > break-statement< / em > → < strong > break< / strong > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/label-name" target = "_blank" > < em > label-name< / em > < / a > < em > opt< / em > < / p >
< / blockquote >
< p > < a name = "continue_statement" > < / a > < / p >
< h3 id = "continue-" > Continue 语句< / h3 >
< p > < code > continue< / code > 语句用于终止循环中当前迭代的执行,但不会终止该循环的执行。使用< code > continue< / code > 语句时,可以只写< code > continue< / code > 这个关键词,也可以在< code > continue< / code > 后面跟上标签名( label name) ,像下面这样:< / p >
< p > < code > continue< / code > 语句用于终止循环中当前迭代的执行,但不会终止该循环的执行。使用< code > continue< / code > 语句时,可以只写< code > continue< / code > 这个关键词,也可以在< code > continue< / code > 后面跟上标签名( label name) ,像下面这样:< / p >
< pre > < code class = "lang-swift" > continue
continue `label name`
< / code > < / pre >
< p > 当< code > continue< / code > 语句后面带标签名时,可用于终止由这个标签标记的循环中当前迭代的执行。< / p >
< p > 而当只写< code > break< / code > 时,可用于终止上下文中包含< code > continue< / code > 语句的最内层循环中当前迭代的执行。< / p >
< p > 在这两种情况下,控制权都会被传递给循环外面的第一行语句。< / p >
< p > 在< code > for< / code > 语句中,< code > continue< / code > 语句执行后,< em > increment< / em > 表达式还是会被计算,这是因为每次循环体执行完毕后< em > increment< / em > 表达式都会被计算。< / p >
< p > 关于使用< code > continue< / code > 语句的例子,请参考 < a href = "../chapter2/05_Control_Flow.html" > 控制流< / a > 一章的< a href = "" > Continue< code > 待添加链接< / code > < / a > 和< a href = "" > 带标签的语句< code > 待添加链接< / code > < / a > 。< / p >
< p > 在< code > for< / code > 语句中,< code > continue< / code > 语句执行后,< em > increment< / em > 表达式还是会被计算,这是因为每次循环体执行完毕后 < em > increment< / em > 表达式都会被计算。< / p >
< p > 关于使用< code > continue< / code > 语句的例子,详情参见 < a href = "../chapter2/05_Control_Flow.html" > 控制流< / a > 一章的 < a href = "../chapter2/05_Control_Flow.html#continue " > Continue< / a > 和< a href = "../chapter2/05_Control_Flow.html#labeled_statements " > 带标签的语句< / a > 。< / p >
< blockquote >
< p > GRAMMAR OF A CONTINUE STATEMENT< / p >
< p > < em > continue-statement< / em > → < strong > continue< / strong > < a href = "https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/label-name" target = "_blank" > < em > label-name< / em > < / a > < em > opt< / em > < / p >
< / blockquote >
< p > < a name = "fallthrough_statement" > < / a > < / p >
< h3 id = "fallthrough-" > Fallthrough 语句< / h3 >
< p > < code > fallthrough< / code > 语句用于在< code > switch< / code > 语句中传递控制权。< code > fallthrough< / code > 语句会把控制权从< code > switch< / code > 语句中的一个< em > case< / em > 传递给下一个< em > case< / em > 。这种传递是无条件的,即使下一个< em > case< / em > 的值 与< code > switch< / code > 语句的控制表达式的值不匹配。< / p >
< p > < code > fallthrough< / code > 语句可出现在< code > switch< / code > 语句中的任意< em > case< / em > 里,但不能出现在最后一个< em > case< / em > 块 中。同时,< code > fallthrough< / code > 语句也不能把控制权传递给使用了可选绑定的< em > case< / em > 块 。< / p >
< p > 关于在< code > switch< / code > 语句中使用< code > fallthrough< / code > 语句的例子,请参考 < a href = "../chapter2/05_Control_Flow.html" > 控制流< / a > 一章的< a href = "" > 控制传递语句< code > 待添加链接< / code > < / a > 。< / p >
< p > < code > fallthrough< / code > 语句用于在< code > switch< / code > 语句中传递控制权。< code > fallthrough< / code > 语句会把控制权从< code > switch< / code > 语句中的一个 case 传递给下一个 case 。这种传递是无条件的,即使下一个 case 的模式 与< code > switch< / code > 语句的控制表达式的值不匹配。< / p >
< p > < code > fallthrough< / code > 语句可出现在< code > switch< / code > 语句中的任意 case 里,但不能出现在最后一个 case 分支 中。同时,< code > fallthrough< / code > 语句也不能把控制权传递给使用了可选绑定的 case 分支 。< / p >
< p > 关于在< code > switch< / code > 语句中使用< code > fallthrough< / code > 语句的例子,详情参见 < a href = "../chapter2/05_Control_Flow.html" > 控制流< / a > 一章的< a href = "../chapter2/05_Control_Flow.html#control_transfer_statements " > 控制传递语句< / a > 。< / p >
< blockquote >
< p > GRAMMAR OF A FALLTHROUGH STATEMENT< / p >
< p > < em > continue-statement< / em > → < strong > fallthrough< / strong > < / p >