在 Swift 中。有两种类型的语句:简单语句和控制流语句。简单语句是最常见的。用于构造表达式和声明。控制流语句则用于控制程序运行的流程,Swift 中有三种类型的控制流语句:循环语句、分支语句和控制传递语句。
 
循环语句用于反复运行代码块。分支语句用于运行满足特定条件的代码块;控制传递语句则用于改动代码的运行顺序。在稍后的叙述中,将会具体地介绍每一种类型的控制流语句。
 
是否将分号(;)加入到语句的结尾处是可选的。但若要在同一行内写多条独立语句,请务必使用分号。
 
GRAMMAR OF A STATEMENT
 
statement → expression; opt
 
statement → declaration; opt
 
statement → loop-statement; opt
 
statement → branch-statement; opt
 
statement → labeled-statement
 
statement → control-transfer-statement; opt
 
statement → statment statements; opt
 
循环语句
取决于特定的循环条件,循环语句同意反复运行代码块。Swift 提供四种类型的循环语句:for语句、for-in语句、while语句和do-while语句。
 
通过break语句和continue语句能够改变循环语句的控制流。有关这两条语句。详情參见 Break 语句和 Continue 语句。
 
GRAMMAR OF A LOOP STATEMENT
 
loop-statement → for-statement
 
loop-statement → for-in-statement
 
loop-statement → while-statement
 
loop-statement → do-while-statement
 
For 语句
for语句同意在反复运行代码块的同一时候,递增一个计数器。
 
for语句的形式例如以下:
  1. for `initialzation`; `condition`; `increment` {
  2. `statements`
  3. }
initialzation、condition 和 increment 之间的分号,以及包围循环体 statements 的大括号都是不可省略的。
 
for语句的运行流程例如以下:
 
1、initialzation 仅仅会被运行一次,通经常使用于声明和初始化在接下来的循环中须要使用的变量。
2、计算 condition 表达式: 假设为true。statements 将会被运行,然后转到第3步。假设为false,statements 和 increment 都不会被运行。for至此运行完成。
3、计算 increment 表达式。然后转到第2步。

 
定义在 initialzation 中的变量仅在for语句的作用域以内有效。condition 表达式的值的类型必须遵循LogicValue协议。
 
GRAMMAR OF A FOR STATEMENT
 
for-statement → for for-init opt ; expression opt ; expression opt code-block
 
for-statement → for ( for-init opt ; expression opt ; expression opt ) code-block
 
for-statement → variable-declaration | expression-list
 
For-In 语句
for-in语句同意在反复运行代码块的同一时候。迭代集合(或遵循Sequence协议的随意类型)中的每一项。

 
for-in语句的形式例如以下:
  1. for `item` in `collection` {
  2. `statements`
  3. }
for-in语句在循环開始前会调用 collection 表达式的generate方法来获取一个生成器类型(这是一个遵循Generator协议的类型)的值。接下来循环開始。调用 collection 表达式的next方法。

假设其返回值不是None。它将会被赋给 item,然后运行 statements,运行完成后回到循环開始处;否则,将不会赋值给 item 也不会运行 statements。for-in至此运行完成。

 
GRAMMAR OF A FOR-IN STATEMENT
 
for-in-statement → for pattern in expression code-block
 
While 语句
while语句同意反复运行代码块。
 
while语句的形式例如以下:
  1. while `condition` {
  2. `statements`
  3. }
while语句的运行流程例如以下:
 
1、计算 condition 表达式: 假设为真true,转到第2步。

假设为false。while至此运行完成。

2、运行 statements 。然后转到第1步。
 
因为 condition 的值在 statements 运行前就已计算出。因此while语句中的 statements 可能会被运行若干次,也可能不会被运行。
 
condition 表达式的值的类型必须遵循LogicValue协议。同一时候,condition 表达式也能够使用可选绑定,详情參见可选绑定。
 
GRAMMAR OF A WHILE STATEMENT
 
while-statement → while while-condition code-block
 
while-condition → expression | declaration
 
Do-While 语句
do-while语句同意代码块被运行一次或多次。

 
do-while语句的形式例如以下:
  1. do {
  2. `statements`
  3. } while `condition`
do-while语句的运行流程例如以下:
 
1、运行 statements。然后转到第2步。
2、计算 condition 表达式: 假设为true,转到第1步。假设为false,do-while至此运行完成。
 
因为 condition 表达式的值是在 statements 运行后才计算出,因此do-while语句中的 statements 至少会被运行一次。
 
condition 表达式的值的类型必须遵循LogicValue协议。同一时候,condition 表达式也能够使用可选绑定,详情參见可选绑定。

 
GRAMMAR OF A DO-WHILE STATEMENT
 
do-while-statement → do code-block while while-condition
 
分支语句
取决于一个或者多个条件的值。分支语句同意程序运行指定部分的代码。

显然。分支语句中条件的值将会决定怎样分支以及运行哪一块代码。Swift 提供两种类型的分支语句:if语句和switch语句。

 
switch语句中的控制流能够用break语句改动,详情请见Break 语句。

 
GRAMMAR OF A BRANCH STATEMENT
 
branch-statement → if-statement
 
branch-statement → switch-statement
 
If 语句
取决于一个或多个条件的值。if语句将决定运行哪一块代码。

 
if语句有两种标准形式,在这两种形式里都必须有大括号。
 
第一种形式是当且仅当条件为真时运行代码。像以下这样:
  1. if `condition` {
  2. `statements`
  3. }
另外一种形式是在第一种形式的基础上加入 else 语句,当仅仅有一个 else 语句时,像以下这样:
  1. if `condition` {
  2. `statements to execute if condition is true`
  3. } else {
  4. `statements to execute if condition is false`
  5. }
同一时候,else 语句也可包括if语句。从而形成一条链来測试很多其它的条件。像以下这样:
  1. if `condition 1` {
  2. `statements to execute if condition 1 is true`
  3. } else if `condition 2` {
  4. `statements to execute if condition 2 is true`
  5. }
  6. else {
  7. `statements to execute if both conditions are false`
  8. }
if语句中条件的值的类型必须遵循LogicValue协议。同一时候,条件也能够使用可选绑定。详情參见可选绑定。
 
GRAMMAR OF AN IF STATEMENT
 
if-statement → if if-condition code-block else-clause opt
 
if-condition → expression | declaration
 
else-clause → else code-block | else if-statement opt
 
Switch 语句
取决于switch语句的控制表达式(control expression),switch语句将决定运行哪一块代码。

 
switch语句的形式例如以下:
  1. switch `control expression` {
  2. case `pattern 1`:
  3. `statements`
  4. case `pattern 2` where `condition`:
  5. `statements`
  6. case `pattern 3` where `condition`,
  7. `pattern 4` where `condition`:
  8. `statements`
  9. default:
  10. `statements`
  11. }
switch语句的控制表达式(control expression)会首先被计算。然后与每个 case 的模式(pattern)进行匹配。假设匹配成功,程序将会运行相应的 case 分支里的 statements。另外,每个 case 分支都不能为空。也就是说在每个 case 分支中至少有一条语句。假设你不想在匹配到的 case 分支中运行代码。仅仅需在该分支里写一条break语句就可以。

 
能够用作控制表达式的值是十分灵活的,除了标量类型(scalar types。如Int、Character)外,你能够使用不论什么类型的值,包含浮点数、字符串、元组、自己定义类的实例和可选(optional)类型,甚至是枚举类型中的成员值和指定的范围(range)等。

关于在switch语句中使用这些类型,详情參见控制流一章的 Switch。

 
你能够在模式后面加入一个起保护作用的表达式(guard expression)。起保护作用的表达式是这样构成的:keywordwhere后面跟着一个作为额外測试条件的表达式。因此,当且仅当控制表达式匹配一个case的某个模式且起保护作用的表达式为真时,相应 case 分支中的 statements 才会被运行。在以下的样例中,控制表达式仅仅会匹配含两个相等元素的元组。如(1, 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 语句。

 
GRAMMAR OF A SWITCH STATEMENT
 
switch-statement → switch expression { switch-cases opt }
 
switch-cases → switch-case switch-cases opt
 
switch-case → case-label statement | default-label statements
 
switch-case → case-label ; | default-label ;
 
case-label → case case-item-list :
 
case-item-list → pattern guard-clause opt | pattern guard-clause opt, case-item-list
 
default-label → default :
 
guard-clause → where guard-expression
 
guard-expression → expression
 
带标签的语句
你能够在循环语句或switch语句前面加上标签。它由标签名和紧随其后的冒号(:)组成。在break和continue后面跟上标签名能够显式地在循环语句或switch语句中更改控制流,把控制权传递给指定标签标记的语句。关于这两条语句使用方法。详情參见 Break 语句和 Continue 语句。

 
标签的作用域是该标签所标记的语句之后的全部语句。你能够不使用带标签的语句,但仅仅要使用它,标签名就必唯一。
 
关于使用带标签的语句的样例,详情參见控制流一章的带标签的语句。

 
GRAMMAR OF A LABELED STATEMENT
 
labeled-statement → statement-label loop-statement | statement-label switch-statement
 
statement-label → label-name :
 
label-name → identifier
 
控制传递语句
通过无条件地把控制权从一片代码传递到还有一片代码,控制传递语句可以改变代码运行的顺序。Swift 提供四种类型的控制传递语句:break语句、continue语句、fallthrough语句和return语句。
 
GRAMMAR OF A CONTROL TRANSER STATEMENT
 
control-transfer-statement → break-statement
 
control-transfer-statement → continue-statement
 
control-transfer-statement → fallthrough-statement
 
control-transfer-statement → return-statement
 
Break 语句
break语句用于终止循环或switch语句的运行。使用break语句时,能够仅仅写break这个关键词。也能够在break后面跟上标签名(label name),像以下这样:
  1. break
  2. break `label name`
当break语句后面带标签名时,可用于终止由这个标签标记的循环或switch语句的运行。
 
而当仅仅写break时。则会终止switch语句或上下文中包括break语句的最内层循环的运行。

 
在这两种情况下,控制权都会被传递给循环或switch语句外面的第一行语句。
 
关于使用break语句的样例,详情參见控制流一章的 Break 和带标签的语句。

 
GRAMMAR OF A BREAK STATEMENT
 
break-statement → break label-name opt
 
Continue 语句
continue语句用于终止循环中当前迭代的运行,但不会终止该循环的运行。使用continue语句时,能够仅仅写continue这个关键词,也能够在continue后面跟上标签名(label name)。像以下这样:
  1. continue
  2. continue `label name`
当continue语句后面带标签名时。可用于终止由这个标签标记的循环中当前迭代的运行。
 
而当仅仅写break时,可用于终止上下文中包括continue语句的最内层循环中当前迭代的运行。
 
在这两种情况下,控制权都会被传递给循环外面的第一行语句。
 
在for语句中,continue语句运行后。increment 表达式还是会被计算。这是由于每次循环体运行完成后 increment 表达式都会被计算。
 
关于使用continue语句的样例,详情參见控制流一章的 Continue 和带标签的语句。

 
GRAMMAR OF A CONTINUE STATEMENT
 
continue-statement → continue label-name opt
 
Fallthrough 语句
fallthrough语句用于在switch语句中传递控制权。fallthrough语句会把控制权从switch语句中的一个 case 传递给下一个 case 。这样的传递是无条件的。即使下一个 case 的模式与switch语句的控制表达式的值不匹配。
 
fallthrough语句可出如今switch语句中的随意 case 里,但不能出如今最后一个 case 分支中。

同一时候,fallthrough语句也不能把控制权传递给使用了可选绑定的 case 分支。

 
关于在switch语句中使用fallthrough语句的样例。详情參见控制流一章的控制传递语句。
 
GRAMMAR OF A FALLTHROUGH STATEMENT
 
continue-statement → fallthrough
 
Return 语句
return语句用于在函数或方法的实现中将控制权传递给调用者,接着程序将会从调用者的位置继续向下运行。

 
使用return语句时,能够仅仅写return这个关键词,也能够在return后面跟上表达式,像以下这样:
  1. return
  2. return `expression`
当return语句后面带表达式时,表达式的值将会返回给调用者。假设表达式值的类型与调用者期望的类型不匹配,Swift 则会在返回表达式的值之前将表达式值的类型转换为调用者期望的类型。
 
而当只写return时。不过将控制权从该函数或方法传递给调用者,而不返回一个值。(这就是说,该函数或方法的返回类型为Void或())
 
GRAMMAR OF A RETURN STATEMENT
 
return-statement → return expression opt

swift 简单语句 控制流语句的更多相关文章

  1. Swift中的循环语句

    循环语句能够使程序代码重复执行.Swift编程语言支持4种循环构造类型:while.do while.for和for in.for和while循环是在执行循环体之前测试循环条件,而do while是在 ...

  2. C语言控制流语句

    title: 2017-10-18控制流 tags: binsearch else-if, shellsort, insertsort grammar_cjkRuby: true --- 前段时间忙着 ...

  3. 了解Python控制流语句——if语句

    控制流 截止到现在,在我们所看过的程序中,总是有一系列语句从上到下精确排列,并交由 Python 忠实地执行.如果你想改变这一工作流程,应该怎么做?就像这样的情况:你需要程序作出一些决定,并依据不同的 ...

  4. 归纳整理Python中的控制流语句的知识点

    归纳整理Python中的控制流语句的知识点 Python 解释器在其最简单的级别,以类似的方式操作,即从程序的顶端开始,然后一行一行地顺序执行程序语句.例如,清单 1 展示了几个简单的语句.当把它们键 ...

  5. 带你学够浪:Go语言基础系列 - 8分钟学控制流语句

    ★ 文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) " 对于一般的语言使用者来说 ,20% ...

  6. linux 几个控制流语句的格式例子(if语句)

    linux 几个控制流语句的格式例子:if 语句例子:#!/bin/sh a=10b=20 if [ $a == $b ]then echo "a is equal to b"el ...

  7. java基础-控制流语句

    浏览以下内容前,请点击并阅读 声明 一般情况下,代码的执行按照从上到下的顺序,然而通过加入一些判断,循环和跳转语句,你可以有条件地执行特定的语句. 接下来分三部分介绍Java的控制流语句,他们是判断语 ...

  8. (Python )控制流语句if、for、while

    这一节,我们将学习Python的控制流语句,主要包括if.for.while.break.continue 和pass语句 1. If语句 if语句也许是我们最熟悉的语句.其使用方法如下: x=inp ...

  9. Swift入门篇-循环语句

    今天早上一起来所有新闻都是报道荷兰5-1战胜西班牙,我一看没有搞错吧,顿时想都如果中国队vs荷兰队也不至于会输的怎么惨吧,难道是荷兰队开挂了,于是我看了一下昨天比赛的视频直播,还真是新闻报道的那样,顿 ...

随机推荐

  1. sn9c291 驱动载入成功,mpayer无法播放

    先眼下将一个sn9c291+ov9712的模块驱动在fedora上载入成功,但是在使用mplayer却无法播放,不知道为何? watermark/2/text/aHR0cDovL2Jsb2cuY3Nk ...

  2. URAL 1707. Hypnotoad's Secret(树阵)

    URAL 1707. Hypnotoad's Secret space=1&num=1707" target="_blank" style="" ...

  3. 深入浅出OpenStack云计算平台管理(nova-compute/network)

    一.本课程是怎么样的一门课程(全面介绍)          1.1. 课程的背景           OpenStack是 一个由Rackspace发起.全球开发者共同参与的开源项目,旨在打造易于部署 ...

  4. Boost::Thread 多线程的基础知识

    Boost.Thread可以使用多线程执行可移植C++代码中的共享数据.它提供了一些类和函数来管理线程本身,还有其它一些为了实现在线程之间同步数据或者提供针对特定单个线程的数据拷贝.头文件:#incl ...

  5. window2003远程桌面“已达最大连接数”

    使用命令行强制注销远程登录用户 Fri, 04/19/2013 - 09:29 - admin 来源地址: http://space.itpub.net/10067101/viewspace-6147 ...

  6. jstorm简介(转)

    Jstorm是参考storm的实时流式计算框架,在网络IO.线程模型.资源调度.可用性及稳定性上做了持续改进,已被越来越多企业使用 作为commiter和user,我还是非常看好它的应用前景,下面是在 ...

  7. [置顶] ※数据结构※→☆线性表结构(queue)☆============队列 顺序存储结构(queue sequence)(八)

    队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的 ...

  8. 开发人员福利!ChromeSnifferPlus 插件正式登陆 Chrome Web Store

    今天(2014-10-30)下午,ChromeSnifferPlus 插件正式登陆 Chrome Web Store. 在线安装地址: https://chrome.google.com/websto ...

  9. 【Demo 0016】SQLite 数据库

    本章学习要点:       1.  熟悉SQL语句:       2.  掌握SQLit库的基本用法;        3.  掌握SQLite封装:

  10. MySql安装(rpm)和启动配置

    MySql安装(rpm)和启动配置 安装环境: OS:Oracle Linux 5.9 安装步骤: 1.解压MySql安装包 [root@bakdbserver mysql]# tar -xf MyS ...