美文网首页
1.6 分支选择

1.6 分支选择

作者: 八条8tiao | 来源:发表于2016-07-18 15:47 被阅读30次

    我们并不希望只能写出逐行线性执行的程序。因为代码和人生一样,总会出现岔路口,我们常常需要在岔路口上做出抉择,左边还是右边?。对于人生的选择,swift可没提供什么帮助,但如果在程序当中做选择,swift可以已经为程序员们做好了准备。

    1、if else分支选择

    在程序设计的过程中,我们常常需要让一段代码在一定的条件下才执行。这时候我们就可以选择使用if关键字。我们先看一下if else关键字的语法描述。

    首先是if关键字,后面是一个条件表达式,如果条件表达式为真,则执行第一段代码,否则执行第二段代码。使用ifelse可以轻松实现一个二元的分支选择。我们看一个简单的例子,在两个数中,选择一个大的打印输出。

    var x = arc4random_uniform(100)   // x为100以内的随机数
    var y = arc4random_uniform(100)   // y为100以内的随机数
    
    if x > y {
        print(x)
    } else {
        print(y)
    }
    

    其实我们通过if else的组合可以生成更复杂的,就像这样的.

    if x > y {
        print(x)
    } else if x == y {
        print(x)
    } else {
        print(y)
    }
    

    这种冗长的表达方式并不是一种最好的选择,我们可以使用switch关键字来实现多路分支分支,不但在会产生更易读的代买结构,更重要的是switch可以提供更强劲的 模式匹配 能力。关于switch的模式匹配,可以看另外一篇内容 switch与模式匹配

    2、switch case分支选择

    switch可以帮我们做两个重要的工作,一个是描述所有的分支结构,另外一个是通过模式匹配,实现分支选择,我们可以认为if是通过条件表达式来进行分支选择的,而switch则是通过模式匹配进行分支选择,当然这并不是说switch不可以使用条件表达式哦,可以看另外一篇内容switch与模式匹配来了解switch如何使用条件表达式。我们先看下一switch的语法表达式。

    匹配对象按照顺序依次与条件分支进行匹配,直到遇到一条可以匹配成功的分支后,执行该分支对应的代码。当代码执行完成以后,正常的流程就结束了。

    let number = 3
    
    switch number {
    case 1:
        print("Monday")
    case 2:
        print("Tuesday")
    case 3:
        print("Wednesday")
    case 4:
        print("Thursday")
    case 5:
        print("Friday")
    case 6:
        print("Saturday")
    case 7:
        print("Sunday")
    default:
        print("error")
    }
    

    这是一个非常简单的例子,把一个整数转化为星期的单词描述。其中常量 number 就是匹配对象。依次与每个分支进行匹配,最后执行print("Wednesday")后,switch语句结束。

    swift默认为每个case语句添加了break,一但匹配成功并执行完分支对应的代码后,流程就会被break结束掉,如果我们希望无论是否匹配成功都要一次执行每个分支的匹配,那么我们可以使用fallthrough关键字来实现。

    let number = 3
    
    switch number {
    case 3:
        print("Monday")
        fallthrough
    case 4:
        print("Tuesday")
        fallthrough
    default:
        print("error")
    }
    

    通过fallthrough,number会依次与每一个分支条件进行匹配,尽管第一个分支条件就已经完成匹配了。

    相关文章

      网友评论

          本文标题:1.6 分支选择

          本文链接:https://www.haomeiwen.com/subject/vpnpjttx.html