美文网首页专注iOS开发(OC/Swift)
跟着洲洲哥一块学习Swift-控制流

跟着洲洲哥一块学习Swift-控制流

作者: 洲洲哥 | 来源:发表于2016-06-29 11:50 被阅读10次

    本文首发地址

    今天给大家介绍控制流,也就是控制语句了。比如if,for,switch,do...while...

    下面就开始介绍了for 循环在Swift中的使用。

    普通循环 For-In

    
    你可以使用 for-in 循环来遍历一个集合里面的所有元素,例如由数字表示的范围、数组中的元素、字符串中的字符。
    
    循环遍历1到10之间的数字
    
    // 循环语句
    for index in 1...10  {
      print("\(index)")
    }
    注意:这里的【...】就是表示在一个区间范围内
    
    
    有些时候我们就没必要知道他们的索引或者就想通过循环来计算另外一组数据
    我们可以这样
    let base = 3
    let power = 10
    var answer = 1
    
    for _ in 1...power {
        answer *= base
        print("\(answer)")
    }
    
    

    循环遍历一个数组

    循环遍历输出数组元素
    let names:[String] = ["A","B","C"];
    for items in names {
       print("\(items)")
    }
    // A
    // B
    // C
    

    循环遍历一个字典

    /*
    遍历字典时,字典的每项元素会以 (key, value)元组的形式返回,你可以在 for-in 循环中使用显式的常量名称来解读 (key, value)元组
    */
    let nameDict = ["A":10,"B":11,"C":12]
    for (index ,items) in nameDict {
         print("index:\(index)+++++items\(items)")
    }
    

    循环遍历一个字符串

    var chasTemp = "china"
    for char in chasTemp.characters {
     print("\(char)")
    }
    

    条件语句
    根据特定的条件执行特定的代码通常是十分有用的,例如:当错误发生时,你可能想运行额外的代码;或者,当输入的值太大或太小时,向用户显示一条消息等。要实现这些功能,你就需要使用条件语句。

    Swift 提供两种类型的条件语句:if语句和switch语句。通常,当条件较为简单且可能的情况很少时,使用if语句。而switch语句更适用于复杂的条件、可能的情况很多且需要用到模式匹配(pattern-matching)的情境。

    if语句

    if语句最简单的形式就是只包含一个条件,当且仅当该条件为真时,才执行相关代码:

    let  tempStr = 10
    if tempStr <= 20 {
        print("yes-----")
    }else {
     print("nono")
    }
    
    

    Switch
    switch语句会尝试把某个值与若干个模式(pattern)进行匹配。根据第一个匹配成功的模式,switch语句会执行对应的代码。当有可能的情况较多时,通常用switch语句替换if语句。

    Switch语句

    switch语句最简单的形式就是把某个值与一个或若干个相同类型的值作比较:

    /// 用多个元素 去匹配一个元素
    let compareStr: Character = "w"
    
    switch compareStr {
    case "a","b","c","d","e" :
              print("在一堆元素中匹配到了W")
    case "w","x","y","z" :
        print("在一堆元素中匹配到了>>>>>>>>W")
    default:
        print("在一堆元素中没有匹配任何数据")
    }
    
    

    单个匹配

    // 还可以单个匹配
    switch compareStr {
    case "a" :
    print("单个匹配到了》》》》a")
    case "w" :
    print("单个匹配到了>>>>>w")
    default:
    print("好像没有匹配到什么哦")
    }
    

    范围匹配

    /**
     *  范围匹配,可以判断当前case中的元素是否为在你设置的区间范围内。
     */
    let count = 3
    var result = ""
    switch count {
    case 0:
        result = "no"
        print("是0")
    case 1...3:
        result = "two"
        print("是的在1到3的范围内")
    case 0...10:
        result = "three"
        print("是的在0到10 的范围内")
    case 11...20:
        result = "four"
        print("是的在11到20 的范围内")
    default:
        print("----------mm//////-------")
        print("w5")
    }
    print("--------\(result)")
    
    

    元组

    /**
     *  元组比较,可以让元组中的任何一个元素拿来比较
     */
    let pointStr = (2,5)
    switch pointStr {
    case (0,0):
        print("---原点")
    case (1,_):
        print("---x坐标为1")
    case (_,5):
        print("---y坐标为5")
    case (1...3,4...10):
        print("---区间范围内")
    default:
        print("---MM---------")
    }
    
    

    值绑定
    case块的模式允许将匹配的值绑定到一个临时的常量或变量,这些常量或变量在该case块里就可以被引用了——这种行为被称为值绑定。

    /**
     *  值绑定
     */
    let  anthor = (20,29)
    switch anthor {
    case (let x , 0):
        print("---值绑定--X")
    case (2 , let y):
        print("---值绑定--y")
    case let(x,y):// 这里包含了所有的情况所以就没必须在写default
        print("---值绑定-X-Y")
    default:
        print("值绑定Switch")
    }
    
    注意:由于最后一个case块匹配了余下所有可能的值,switch语句就已经完备了,因此不需要再书写默认块。
    

    Where
    case块的模式可以使用where语句来判断额外的条件。

    /**
     *  where
     */
    let wherePoint = (10,-10)
    switch wherePoint {
    //case let (x,y) where x > y:
    //    print("switch  x > y")
    case let(x,y) where x < y:
        print("switch  x < y")
    case let(x,y) where x == -y:
        print("switch  x == -y")
    case let(x,y):
        print("switch-Where");
    }
    
    

    控制转移语句
    控制转移语句改变你代码的执行顺序,通过它你可以实现代码的跳转。Swift有四种控制转移语句。

    • continue
    • break
    • fallthrough
    • return

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

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

    let word = "we are good students"
    var pushStr = ""
    for chas in word.characters {
        if chas == "a" {
            print("是好学生")
            continue
        }else {
            print("switch break")
        }
    }
    
    continue:简单来时就是告诉循环语句,继续走,别停下来。和以前的节奏一样保持队形。 
    

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

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

    for chas in "i love you ".characters {
        if chas == "v" {
           print("============================")
            break
        }else {
            print("00000000000000000000")
        }
    }
    break:和continue就是恰恰相反的两种情况,循环体里只要碰见了这个break,这个循环体就要立刻停止。这个是命令!!!
    

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

    let fallStr = 10
    switch fallStr {
    case 2,3,4,6,7,8,10:
        print("是de")
        fallthrough
    case 6,7,8,0:
        print("是的dddddddddddddd")
    //    fallthrough
    default:
        print("Fallthrough")
    }
    执行结果
    //是de
    //是的dddddddddddddd
    //Fallthrough
    

    注意下面是一个报错的Switch

    //报错的switch
    let fallyuan = (14,16)
    switch fallyuan {
    case let(x,y) where x < y:
        print("2222:1是de元组")
        fallthrough
    case (0...20,0...20):
        print("33333:2")
        fallthrough
    case let(q,w) where q > w:
        print("2222:2是的ddd元组ddd")
        fallthrough
    case (_,16):
        print("====:3==================")
    fallthrough
    
    default:
        print("Fallthrough")
    }
    
    
    修改过后正确的Switch
    
    let fallyuan = (100,16)
    switch fallyuan {
    case let(x,y) where x < y:
        print("2222:1是de元组")
        fallthrough
    case (0...20,0...20):
        print("33333:2")
        fallthrough
    //case let(q,w) where q > w:
    //    print("2222:2是的ddd元组ddd")
    //    fallthrough
    case (_,16):
        print("====:3==================")
    fallthrough
    
    default:
        print("Fallthrough")
    }
    

    特别注意: NOTE

    
    1:fallthrough关键字不会检查它下一个将会落入执行的case中的匹配条件。
    fallthrough简单地使代码执行继续连接到下一个case中的执行代码,
    这和C语言标准中的switch语句特性是一样的。
    2:当使用了fall through时,当该次case的下一个case中不允许出现变量或者常量,其他case不用注意!!!
    3:使用了fall through时,会自动落入下一个case。但是不会判断是否满足执行条件,就会执行case中的代码段。
    

    如有问题可添加我的QQ:1290925041
    还可添加QQ群:234812704(洲洲哥学院)
    欢迎各位一块学习,提高逼格!
    也可以添加洲洲哥的微信公众号

    更多消息

    更多信iOS开发信息 请以关注洲洲哥 的微信公众号,不定期有干货推送:

    这里写图片描述

    相关文章

      网友评论

        本文标题:跟着洲洲哥一块学习Swift-控制流

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