zoukankan      html  css  js  c++  java
  • 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.


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

  • 相关阅读:
    android apk 防止反编译技术第二篇-运行时修改字节码
    android apk 防止反编译技术第一篇-加壳技术
    chromium浏览器开发系列第五篇:Debugging with WinDBG
    你所不知道的html5与html中的那些事(五)——web图像
    你所不知道的html5与html中的那些事(四)——文本标签
    无法导入以下密钥文件: xxxx.pfx,该密钥文件可能受密码保护 的解决方案
    GCD & LCM的一些性质
    HDU
    next
    树形结构与成环图的一个区别
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4529370.html
Copyright © 2011-2022 走看看