代码改变世界

Swift学习笔记(6):控制流

2017-05-19 11:57  杨平  阅读(176)  评论(0编辑  收藏  举报

目录:

  • For-In
  • While
  • If-Else, Guard-Else
  • Switch
  • 控制转移

For-In

可以使用for-in语句循环遍历集合、区间、元组、字符串。

// 遍历区间,返回元素值
for index in 1...5 {
    print("(index) times 5 is (index * 5)")
}

// 循环区间,忽略元素值
for _ in 1...power {
    answer *= base
}

// 遍历数组
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
    print("Hello, (name)!")
}

// 遍历字典
let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
    print("(animalName)s have (legCount) legs")
}

 

While

可以使用while和repeat-while语句进行条件循环遍历。

while square < finalSquare {
    // statements ...
}

// 类似其他语言的do-while语句
repeat {
    // statements ...
} while square < finalSquare

 

If-Else, Guard-Else
temperatureInFahrenheit = 90
if temperatureInFahrenheit <= 32 {
    print("It's very cold. Consider wearing a scarf.")
} else if temperatureInFahrenheit >= 86 {
    print("It's really warm. Don't forget to wear sunscreen.")
} else {
     print("It's not that cold. Wear a t-shirt.")
}

可以使用guard-else语句来要求条件必须为真时,以执行guard语句后的代码。

// person字典中存在key为name的元素时打印name元素值
guard let name = person["name"] else {
    return
}
print("Hello \(name)")

 

Switch

switch语句尝试将某个值与若干个case进行匹配,然后执行第一个匹配成功的case下的代码。

switch语句的每一个可能的值都必须至少有一个case分支与之对应。如果不可能涵盖所有值的情况时,在switch语句最后面使用默认default分支。

switch语句不存在隐式贯穿,即不需要在case下的执行代码中显示使用break。

let someCharacter: Character = "z"
switch someCharacter {
case "a":
    print("The first letter of the alphabet")
// case "b": 打开注释后会有编译错误,不存在隐式贯穿
case "c","z":    // 复合匹配
    print("The last letter of the alphabet")
default:
    print("Some other character")
}

case分支的模式也可以是一个值的区间或元组:

// case分支匹配区间
switch approximateCount {
case 0:
    naturalCount = "no"
case 1..<5:
    naturalCount = "a few"
default:
    naturalCount = "many"
}

// case分支匹配元组
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 (-2...2, -2...2): // 元组元素是区间类型
    print("(\(somePoint.0), \(somePoint.1)) is inside the box")
}

case分支允许将匹配的值绑定到一个临时的常量或变量,并且在case分支体内使用,还可以使用where来补充case匹配条件。

let yetAnotherPoint = (1, 1)
switch yetAnotherPoint {
case (let x, 0):
    print("on the x-axis with an x value of \(x)")
case let (x, y) where x == y: // 输出 "(1, -1) is on the line x == y"
    print("(\(x), \(y)) is on the line x == y")
case let (x, y):
    print("(\(x), \(y)) is just some arbitrary point")
}

 

控制转移
• continue 结束本次循环执行下次循环
• break 结束当前switch,while语句体,不能结束多层嵌套的switch/while/if语句体。
• fallthrough 用在switch语句中,标示贯穿当前case到下一case中。
• return 返回,可终止多层嵌套的switch/while/if语句体。
• throw 抛出异常,结束执行后面的代码。

 continue和break都可以跳转到指定标签的位置执行。

 

声明:该系列内容均来自网络或电子书籍,只做学习总结!