免费开源的iOS开发学习平台

Swift: 6.3 语句和流程控制--控制转移语句

控制转移语句(Control Transfer Statement)通过把控制权从一个代码位转移到另外一个代码位来改变代码的执行顺序。在Swift语言中,提供了如下所示的5种控制转移语句。

  • continue
  • break
  • fallthrough
  • return
  • throw

本章只介绍continue、break 和 fallthrough 这三种控制语句。return 语句将会在函数章节讲解,throw语句将会在异常处理章节讲解。

continue

Swift中的continue语句跟Objective-C中的一样,当遇到continue语句的时候,立即停止本次循环,并且开始下一次的循环,并不会离开循环体。

let input = "Hello Swift~"
var ouput = ""
let charactersToRemove: [Character] = ["a", "e", "i", "o", "u", " "]
for character in input.characters {
    if charactersToRemove.contains(character) {
        continue
    } else {
        ouput.append(character)
    }
}

print(ouput)
//打印结果:HllSwft~

break

break语句会立刻结束整个控制流的执行。当想要更早地结束一个switch代码块或者一个循环体时,都可以使用break语句来实现。

  • 当在循环体中使用break语句时,会立即停止本次循环,然后跳转到循环体结束符大括号的(})的后一条语句。
let input = "我是被一条语句"
let keywords:Character = "一"
var count = 0

for chara in input.characters {
    count += 1
    if(chara == keywords){
        print("找到了")
        break;
    }
}
print("循环执行了\(count)次")
//打印结果:
//找到了
//循环执行了4次
  • 当在一个switch代码块中使用break时,会立即中断该switch代码块的执行,并且跳转到表示 switch 代码块结束的大括号(})后的第一行代码。这个特性可以被用来匹配或者忽略一个或多个分支。因为 Swift 的 switch 需要包含所有的分支而且不允许有为空的分支,有时为了使我们的意图更明显,需要特意匹配或者忽略某个分支。那么当想忽略某个分支时,可以在该分支内写上break语句。当那个分支被匹配到时,分支内的break语句立即结束switch代码块。
let num = 5
var bigChineseNum = ""

switch num {
case 1:
    bigChineseNum = "壹"
case 2:
    bigChineseNum = "贰"
case 3:
    bigChineseNum = "叁"
case 4:
    bigChineseNum = "肆"
case 5:
    bigChineseNum = "伍"
case 6:
    bigChineseNum = "陆"
default:
    break
}
print(bigChineseNum)
//打印结果:伍

fallthrough

switch不会从上一个case分支落入到下一个case分支中。相反,只要第一个匹配到的 case 分支完成了它需要执行的语句,整个 switch 代码块完成了它的执行。相比之下,C语言要求显示地插入break语句到每个switch分支的末尾来阻止自动落入到下一个case分支中。Swift 的这种避免默认落入到下一个分支中的特性,意味着其 switch 功能要比 C 语言的更加清晰和可预测,可以避免无意识地执行多case分支而引发不必要错误的情形。
在Swift 语言中,如果确实需要 C 风格的贯穿(fallthrough)的特性,可以在每个需要该特性的 case 分支中使用fallthrough 关键字。例如,在下面的例子中,使用关键字fallthrough创建了一个数字的描述语句。

let integerToDescribe = 5
var description = " \(integerToDescribe)是一个"
switch integerToDescribe {
case 2, 3, 5, 7, 11, 13, 17, 19:
    description += "质数,同时也是一个"
    fallthrough
default:
    description += "正整数。"
}
print(description)
// 打印结果: 5是一个质数,同时也是一个正整数。

示例代码

https://github.com/99ios/23.6.3