Swift语法基础:19

在Swift中还有一个好玩的东西, 那就是控制转移语句, 它可以改变代码的执行顺序, 可以实现代码的跳转, Swift有四种控制专一的方法, 让我们一起来看看吧:


1.Continue

continue 告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。就好像在说“本次循环迭代我已经执行完了”,但是并不会离开整个循环体。

PS: 在一个 for-condition-increment 循环体中,在调用 continue 语句后,迭代增量仍然 会被计算求值。循环体继续像往常一样工作,仅仅只是循环体中的执行代码会被跳过。

let puzzleInput = "great minds think alike"
var puzzleOutput = "-"
for character in puzzleInput {
switch character {
    case "a", "e", "i", "o", "u":
        continue
    default:
        puzzleOutput.append(character)
    }
}
println(puzzleOutput)
// 打印出来的结果: -grt mnds thnk lk

2.Break

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

当在一个循环体中使用 break 时,会立刻中断该循环体的执行,然后跳转到表示循环体结束 的大括号(})后的第一行代码。不会再有本次循环迭代的代码被执行,也不会再有下次的循环迭代产生。

当在一个 switch 代码块中使用 break 时,会立即中断该 switch 代码块的执行,并且跳转到 表示 switch 代码块结束的大括号(})后的第一行代码。

这种特性可以被用来匹配或者忽略一个或多个分支。因为Swift语言的switch需要包含所有 的分支而且不允许有为空的分支,有时为了使你的意图更明显,需要特意匹配或者忽略某个 分支。那么当你想忽略某个分支时,可以在该分支内写上 break 语句。当那个分支被匹配到时,分支内的 break 语句立即结束 switch 代码块。

PS: 当一个 switch 分支仅仅包含注释时,会被报编译时错误。注释不是代码语句而且也 不能让 switch 分支达到被忽略的效果。你总是可以使用 break 来忽略某个分支。

来看看例子:

let numberSymbol: Character = "三" 
var possibleIntegerValue: Int?
switch numberSymbol {
    case "1", "?", "一", "?":
    possibleIntegerValue = 1
case "2", "?", "二", "?":
    possibleIntegerValue = 2
case "3", "?", "三", "?":
    possibleIntegerValue = 3
case "4", "?", "四", "?":
    possibleIntegerValue = 4
default:
    break
}

if let integerValue = possibleIntegerValue {
    println("The integer value of (numberSymbol) is (integerValue).")
    } else {
    println("An integer value could not be found for (numberSymbol).")
}
// 打印出来的结果: The integer value of 三 is 3.

3.Fallthrough

Swift 语言中的 switch 不会从上一个 case 分支落入到下一个 case 分支中。相反,只要第一个匹配到的 case 分支完成了它需要执行的语句,整个 switch 代码块完成了它的执行。相比 之下,C 语言要求你显示的插入 break 语句到每个 switch 分支的末尾来阻止自动落入到下 一个case分支中。Swift语言的这种避免默认落入到下一个分支中的特性意味着它的switch功能要比 C 语言的更加清晰和可预测,可以避免无意识地执行多个 case 分支从而引发的错 误。

let integerToDescribe = 5
var description = "The number (integerToDescribe) is"

switch integerToDescribe {
    case 2,3,5,7,11,13,17,19:
    description += " a prime number, and also"
    fallthrough
default:
    description += " an integer."
}
println(description)
// 打印出来的结果:The integer value of 三 is 3.

PS: fallthrough 关键字不会检查它下一个将会落入执行的 case 中的匹配条件。fallthrough 简单地使代码执行继续连接到下一个 case 中的执行代码,这和 C 语言标准中的 switch 语句特性是一样的。


4.Labeled Statements

在 Swift 语言中,你可以在循环体和 switch 代码块中嵌套循环体和 switch 代码块来创造复杂的控制流结构。然而,循环体和 switch 代码块两者都可以使用 break 语句来提前结束整 个方法体。因此,显示地指明 break 语句想要终止的是哪个循环体或者 switch 代码块,会很 有用。类似地,如果你有许多嵌套的循环体,显示指明 continue 语句想要影响哪一个循环体也会非常有用。

我们直接来看例子:

var a = 10
var b = 0

varB: while b != a {
    println(b++)
}

println("循环结束, b = (b)")
// 打印出来的结果:
// 0
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
// 9
// 循环结束, b = 10

其实这个Labeled Statements很简单, 就相当于给一个循环体加了一个名字, 而例子中的循环体名字就叫做varB.


好了, 这次我们就讲到之里, 下次我们继续~

原文地址:https://www.cnblogs.com/iOSCain/p/4529370.html