Swift5-控制流

控制流

for-in循环、while循环、条件语句、空值转移语句、提前退出、检测API可用性。

Swift提供了多种流程控制结构,包括可以多次执行任务的while循环,基于特定条件选择执行不同代码分支的if、guard和switch语句,还有控制流程跳转到其它代码位置的break和continue语句。

Swift提供for-in循环来更简单地遍历数组(array)、字典(dictionary)、区间(range)、字符串和其它序列类型。

Swift的switch语句比C语言中更加强大。Swift的switch无须写break,不会发生贯穿情况。且必须有default情况。case可以匹配很多不同的模式,包括间隔匹配,元组tuple和转换到特定类型。switch语句的case中匹配的值可以绑定成临时常量或变量,在case内使用,也可以用在where来描述更复杂的匹配条件。

 

for-in循环:

可以使用for-in循环来遍历一个集合中的所有元素,例如数字范围、数组中的元素或者字符串中的字符。

区间操作符(...)(..<)

for i in 0...5{...}

这里的 i 是一个在每次循环遍历开始时被自动赋值的常量。

如果不需要区间序列内每一项的值,可以使用(_)替代变量名来忽略这个值。

 

while循环:

while循环会一直运行一段语句直到条件变成false。这类循环适合使用在第一次迭代前,迭代次数未知的情况下。Swift提供两种while循环形式:

1)while循环,每次在循环开始时计算条件是否符合。

2)repeat-while循环,每次在循环结束时计算条件是否符合。

repeat{

  statements

}while condition

 

条件语句:

Swift提供两种类型的条件语句:if语句和switch语句。通常,当条件较为简单且可能的情况很少时,使用if语句。switch语句适合条件较复杂、多种排列组合时。

if:

if语句最简单的形式就是只包含一个条件,只有该条件为true时,才执行相关代码。

if和else可结合使用。

 

switch:

switch语句会尝试把某个值与若干个模式进行匹配。根据第一个匹配成功的模式,switch语句会执行对应的代码。

switch语句由多个case组成,每个case关键字后跟着模式的一种可能取值。

必须有default分支。

不存在的隐式贯穿:

与C和OC不同的是,Swift的switch的case分支后无需加上break。它不像C那样case只是入口点。

case分支必须包含至少一条语句。

 

区间匹配:

case分支的模式也可以是一个值的区间。

case 0..<5:...  //表示0到5左闭右开区间

 

元组:

可以使用元组在同一个switch语句中测试多个值。元组中的元素可以是值,也可以是区间。使用下划线(_)来匹配所有可能的值。

let a=(1,"cjj")

switch a{

  case (1,"cjj"):...

  case (......

  default:...

}

 

值绑定:

case分支允许将匹配的值绑定到一个临时的常量或变量,并且在case分支体内使用。这称为值绑定,因为匹配的值在case分支体内,与临时的常量或变量绑定。

 

where:

case分支的模式可以使用where语句来判断额外的条件。

let a=(1,-1)

switch a{

case let (x,y) where x == y:...

case let (x,y) where x == -y:...

default:...

}

 

复合匹配:

当多个条件可以使用同一种方法来处理时,可以将这几种可能放在同一个case后面,并且用逗号隔开。当case后面的任意一种模式匹配的时候,这条分支就会被匹配。如果匹配列表过长,还可以分行书写。

case "a","b","c":...

 case (let a,0)...  //匹配模式为(x,0)的情况,将x赋给常量a

 

控制转移语句:

控制转移语句改变你代码的执行顺序,通过它可以实现代码的跳转。

Swift有五种控制跳转语句:

continue、break、fallthrough、return、throw

 

continue:

continue语句告诉一个循环体立刻停止本次循环,重新开始下次循环。

break:

break语句会立刻结束整个控制流的执行。如果想要更早的结束一个switch代码块或者一个循环体时,也可以使用break语句。循环语句中的break会立刻中断该循环体的执行。

switch语句需要包含所有的分支且不允许有为空的分支。可以在某个分支后写break表示忽略该分支。

 

贯穿:

Swift中的switch不会从上一个case分支落入下一个case分支中。

如果确实需要C风格的贯穿特性,可以在每个需要该特性的case分支中使用fallthrough关键字。

case xxx:

  ...

  fallthrough

case...

 

带标签的语句:

在Swift中,标签(statement label)来标记一个循环体或者条件语句。

声明一个带标签的语句是通过在该语句的关键词的同一行前面放置一个标签,作为这个语句的前导关键字(introducor keyword),并且该标签后面跟随一个冒号。

如:labelname: while cond {statement}

可以使用break labelname或continue labelname的方式来结束或继续这条语句的执行。

带标签语句适合用在多层循环中,标签标识不同的循环体,break和continue接标签名称标识打破或继续哪个循环体。

打破内层循环优势等同于继续外层循环。

 

上一篇:分布式事务和解决方案


下一篇:JS axios cancelToken 是如何实现取消请求?稍有啰嗦但超有耐心的 axios 源码分析