Swift 流程控制

一.for循环

for-in

实例1:

       for index in 1...5{
            print("\(index)times 5 is \(index * 5)")
        }
结果:
1times 5 is 5
2times 5 is 10
3times 5 is 15
4times 5 is 20
5times 5 is 25
1...5表示:[1,5]大于等于1且小于等于5

如果括号内不使用index,可以用_代替:

 var a = 5
        for _ in 1...5{
            a += 1
        }
        print("\(a)")
结果:
10

遍历数组:
 let nameArr = ["Lili","Marry","xiaoming"]
        for name in nameArr {
            print("Hello,\(name)!")
        }
       
结果:
Hello,Lili!
Hello,Marry!
Hello,xiaoming!

遍历字典:

  let ageDict = ["Lili":9,"Marry":10,"xiaoming":12]
        for (name,age) in ageDict {
            print("\(name) is \(age)!")
        }
结果:
Marry is 10!
Lili is 9!
xiaoming is 12!
由于字典是无序的,所以结果不一定按顺序输出


二。while循环

语法:

    while condition {

        statements

    }

举例:
   //唉,举例无能
        var a = 10
        while a>0 {
            a = a-2
        }
        print(a)
结果:0

原来的do...while循环在此处替换成了repeat...while循环。(不举例了)


三。switch

实例:

        let someCharacter: Character = "z"
        switch someCharacter {
        case "a":
            print("The first letter of the alphabet")
        case "z":
            print("The last letter of the alphabet")
        default:
            print("Some other character")
        }
结果:
The first letter of the alphabet

* 注意:与C和Objective_C不同,3.0的swift中switch语句的case中不再需要使用break跳出switch语句,匹配条件后即跳出Switch语句,同时,switch中的default是必须的。

虽然break在switch中不再是必须的,但是由于switch中的case/default中语句不允许有空语句,此时,我们可以使用break跳出语句。

例如:

    let anotherCharacter: Character = "a"
        switch anotherCharacter {
        case "a": // Invalid,the case has an empty body
        case "A":
            print("The letter A")
        default:
            print("Not the letter A")
        }
        if let integerValue = possibleIntegerValue {
            print("The integer value of \(numberSymbol) is \(integerValue).")
        } else {
            print("An integer value Could not be found for \(numberSymbol).")
        }
case "a":是无效的,这将导致程序报错: 'case' label in a 'switch' should have at least one executable statement。

再看下面这个例子
  let numberSymbol: Character = "三"  // Chinese symbol for the number 3
        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 {
            print("The integer value of \(numberSymbol) is \(integerValue).")
        } else {
            print("An integer value Could not be found for \(numberSymbol).")
        }
        // Prints "The integer value of 三 is 3."
此时,default中的可能性很多,我们可能不再需要设置一个possibleIntegerValue的值,此时就可以使用break跳出switch语句。

间隔匹配:

例如:

 let grade = 67
        switch grade {
        case 0...59:
            print("不及格")
        case 60...79:
            print("及格")
        case 80...89:
            print("良好")
        case 90...100:
            print("优秀")
        default:
            break
        }
//输出:及格
元祖(Tuples)匹配:
    let somePoint = (1,1)
    switch somePoint {
    case (0,0):
        print("(0,0) is at the origin")
    case (_,0):
        print("(\(somePoint.0),0) is on the x-axis")
    case (0,_):
        print("(0,\(somePoint.1)) is on the y-axis")
    case (-2...2,-2...2):
        print("(\(somePoint.0),\(somePoint.1)) is inside the Box")
    default:
        print("(\(somePoint.0),\(somePoint.1)) is outside of the Box")
    }
    // Prints "(1,1) is inside the Box"

下划线(_)也称为通配符,可以匹配任何可能的值。

值绑定:

    let anotherPoint = (2,0)
    switch anotherPoint {
    case (let x,0):
        print("on the x-axis with an x value of \(x)")
    case (0,let y):
        print("on the y-axis with a y value of \(y)")
    case let (x,y):
        print("somewhere else at (\(x),\(y))")
    }
    // Prints "on the x-axis with an x value of 2"


where:Switch中还可以使用where来设置附加条件

例如:

    let yetAnotherPoint = (1,-1)
    switch yetAnotherPoint {
    case let (x,y) where x == y:
        print("(\(x),\(y)) is on the line x == y")
    case let (x,y) where x == -y:
        print("(\(x),\(y)) is on the line x == -y")
    case let (x,y):
        print("(\(x),\(y)) is just some arbitrary point")
    }
    // Prints "(1,-1) is on the line x == -y"


控制转移语句:

1.continue;

2.break(不再重复说明);

3.fallthrough;

4.return.

5.throw。


continue:跳出当前循环,执行下一次循环。

例如:

    let puzzleInput = "great minds think alike"
    var puzzleOutput = ""
    for character in puzzleInput.characters {
        switch character {
        case "a","e","i","o","u"," ":
            continue
        default:
            puzzleOutput.append(character)
        }
    }
    print(puzzleOutput)
    // Prints "grtmndsthnklk"


fallthrough:条件匹配成功后,继续执行后面的语句。

例如:

    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."
    }
    print(description)
    // Prints "The number 5 is a prime number,and also an integer."

return:跳出整个循环与语句。

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...