dd

Swift 循环


有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。

编程语言提供了更为复杂执行路径的多种控制结构。

循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的流程图:

循环结构

循环类型

Swift 语言提供了以下几种循环类型。点击链接查看每个类型的详细描述:

Swift for-in 循环

Swift for-in 循环用于遍历一个集合里面的所有元素,例如由数字表示的区间、数组中的元素、字符串中的字符。

语法

Swift for-in 循环的语法格式如下:

for index in var {
   循环体
}

流程图:

实例

import Cocoa

for index in 1...5 {
    print("\(index) 乘于 5 为:\(index * 5)")
}

例子中用来进行遍历的元素是使用闭区间操作符(...)表示的从1到5的数字区间。i

以上程序执行输出结果为:

1 乘于 5 为:5
2 乘于 5 为:10
3 乘于 5 为:15
4 乘于 5 为:20
5 乘于 5 为:25

实例

import Cocoa

var someInts:[Int] = [10, 20, 30]

for index in someInts {
   print( "index 的值为 \(index)")
}

以上程序执行输出结果为:

index 的值为 10
index 的值为 20
index 的值为 30

Swift for 循环

该循环方式在 Swift 3 中已经弃用。

Swift for 循环用来重复执行一系列语句直到达成特定条件,一般通过在每次循环完成后增加计数器的值来实现。

语法

Swift for 循环的语法格式如下:

for init; condition; increment{
   循环体
}

参数解析:

  1. init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
  2. 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
  3. 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
  4. 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。

流程图:

实例

import Cocoa

var someInts:[Int] = [10, 20, 30]

for var index = 0; index < 3; ++index {
   print( "索引 [\(index)] 对应的值为 \(someInts[index])")
}

以上程序执行输出结果为:

索引 [0] 对应的值为 10
索引 [1] 对应的值为 20
索引 [2] 对应的值为 30

Swift While 循环

Swift while循环从计算单一条件开始。如果条件为true,会重复运行一系列语句,直到条件变为false。

语法

Swift while 循环的语法格式如下:

while condition
{
   statement(s)
}

语法中的 statement(s) 可以是一个语句或者一个语句块。 condition 可以是一个表达式。如果条件为true,会重复运行一系列语句,直到条件变为false。

数字 0, 字符串 '0' 和 "", 空的 list(), 及未定义的变量都为 false ,其他的则都为 true。true 取反使用 ! 号或 not,取反后返回 false。

流程图:

实例

import Cocoa
 
var index = 10

while index < 20 
{
   print( "index 的值为 \(index)")
   index = index + 1
}

以上程序执行输出结果为:

index 的值为 10
index 的值为 11
index 的值为 12
index 的值为 13
index 的值为 14
index 的值为 15
index 的值为 16
index 的值为 17
index 的值为 18
index 的值为 19

Swift repeat...while 循环

Swift repeat...while 循环不像 for 和 while 循环在循环体开始执行前先判断条件语句,而是在循环执行结束时判断条件是否符合。

语法

Swift repeat...while 循环的语法格式如下:

repeat
{
   statement(s);
}while( condition );

请注意,条件表达式出现在循环的尾部,所以循环中的 statement(s) 会在条件被测试之前至少执行一次。

如果条件为 true,控制流会跳转回上面的 repeat,然后重新执行循环中的 statement(s)。这个过程会不断重复,直到给定条件变为 false 为止。

数字 0, 字符串 '0' 和 "", 空的 list(), 及未定义的变量都为 false ,其他的则都为 true。true 取反使用 ! 号或 not,取反后返回 false。

流程图:

实例

import Cocoa

var index = 15

repeat{
    print( "index 的值为 \(index)")
    index = index + 1
}while index < 20

以上程序执行输出结果为:

index 的值为 15
index 的值为 16
index 的值为 17
index 的值为 18
index 的值为 19

循环控制语句

循环控制语句改变你代码的执行顺序,通过它你可以实现代码的跳转。Swift 以下几种循环控制语句:

Swift Continue 语句

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

对于 for 循环,continue 语句执行后自增语句仍然会执行。对于 whiledo...while 循环,continue 语句重新执行条件判断语句。

语法

Swift continue语句的语法格式如下:

continue

流程图:

C continue 语句

实例

import Cocoa
 
var index = 10

repeat{
   index = index + 1
	
   if( index == 15 ){ // index 等于 15 时跳过
      continue
   }
   print( "index 的值为 \(index)")
}while index < 20 

以上程序执行输出结果为:

index 的值为 11
index 的值为 12
index 的值为 13
index 的值为 14
index 的值为 16
index 的值为 17
index 的值为 18
index 的值为 19
index 的值为 20

Swift Break 语句

Swift break语句会立刻结束整个控制流的执行。

如果您使用的是嵌套循环(即一个循环内嵌套另一个循环),break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。

语法

Swift break语句的语法格式如下:

break

流程图:

C break 语句

实例

import Cocoa

var index = 10

repeat{
    index = index + 1
    
    if( index == 15 ){  // index 等于 15 时终止循环
        break
    }
    print( "index 的值为 \(index)")
}while index < 20

以上程序执行输出结果为:

index 的值为 11
index 的值为 12
index 的值为 13
index 的值为 14

Swift Fallthrough 语句

Swift fallthrough 语句让 case 之后的语句会按顺序继续运行,且不论条件是否满足都会执行。

Swift 中的 switch 不会从上一个 case 分支落入到下一个 case 分支中。只要第一个匹配到的 case 分支完成了它需要执行的语句,整个switch代码块完成了它的执行。

注意:在大多数语言中,switch 语句块中,case 要紧跟 break,否则 case 之后的语句会顺序运行,而在 Swift 语言中,默认是不会执行下去的,switch 也会终止。如果你想在 Swift 中让 case 之后的语句会按顺序继续运行,则需要使用 fallthrough 语句。

语法

Swift fallthrough 语句的语法格式如下:

fallthrough

一般在 switch 语句中不使用 fallthrough 语句。

实例

以下实例没有使用 fallthrough 语句:

import Cocoa

var index = 10

switch index {
   case 100  :
      print( "index 的值为 100")
   case 10,15  :
      print( "index 的值为 10 或 15")
   case 5  :
      print( "index 的值为 5")
   default :
      print( "默认 case")
}

当上面的代码被编译执行时,它会产生下列结果:

index 的值为 10 或 15

实例

以下实例使用 fallthrough 语句:

import Cocoa

var index = 10

switch index {
   case 100  :
      print( "index 的值为 100")
      fallthrough
   case 10,15  :
      print( "index 的值为 10 或 15")
      fallthrough
   case 5  :
      print( "index 的值为 5")
   default :
      print( "默认 case")
}

当上面的代码被编译执行时,它会产生下列结果:

index 的值为 10 或 15
index 的值为 5