Swift 2.0 学习笔记 5_控制流

//: 控制流

// 循环(for, while)

// 条件(if, guard, switch)

// 控制转移(break, continue, fallthrough, return)

//: For 循环

// for-in 用来遍历一个区间(range), 序列(sequence), 集合(collection), 系列(progression)里面所有的元素执行一系列语句

// for 条件递增(for-condition-increment)语句, 用来重复执行一系列语句直到达成特定条件达成. 一般通过在每次循环完成后增加计数器来实现.

//: for-in 循环

for index in 1...5 {

print(index)

}

// 如果你不需要知道区间内每一项的值, 你可以用下划线(_)代替变量名来忽略对值的访问

let base = 3

let power = 10

var answer = 1

for _ in 1...power {

answer *= base

}

print(answer)

// 使用for-in 遍历一个数组所有元素

let names = ["Anna", "Alex", "Brian", "Jack"]

for name in names {

print("Hello, \(name)!")

}

// 使用for-in 遍历字典

let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]

for (animalName, legCount) in numberOfLegs {

print("\(animalName)s have \(legCount) legs")

}

// for-in 遍历字符串中的字符

let str = "Hello Guibs"

for character in str.characters {

print(character)

}

//: for 条件递增循环

// for initialization; condition; increment { statements }

var index: Int

for index = 0; index < 3; index++ {

print(index)

}

index

//: While 循环

// while 循环, 每次在循环开始时计算条件是否符合

// repeat-while 循环, 每次在循环结束时计算条件是否符合

//: while

// while condition { statements }

var start = 0

var finish = 5

while start < finish {

print("Hello")

start++

}

//: repeat-while

//repeat { statements } while condition

var begin = 0

var end = 5

repeat {

print(begin)

begin++

} while begin < end

//: 条件语句

// if 语句

// switch 语句

//: if

var temperatureInFahrenheit = 30

if temperatureInFahrenheit <= 32 {

print("It's very cold.")

} else if temperatureInFahrenheit <= 40 {

print("It's warm")

} else {

print("It's hot")

}

//: guard

// guard 语句与if 语句不同的是, guard 语句只会有一个代码块, 不想if 语句可以if else 多个代码块. 如果guard 判断其后的表达式布尔值为false时, 才会执行之后代码块里的代码, 如果为true, 则跳过整个guard 语句

func login(person: [String: String]) {

guard let name = person["name"] else {

print("请输入账号")

return

}

print("你好\(name)!")

guard let password = person["password"] else {

print("密码不正确, 不能登入系统")

return

}

print("正在登入系统, 用户名:\(name) 密码:\(password)")

}

login(["name": "Guibs"])

login(["name": "Guibs", "password": "ok"])

//: switch

let someCharacter: Character = "e"

switch someCharacter {

case "a", "e", "i", "o", "u":

print("\(someCharacter) is a vowel")

case "b", "c", "d", "e", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z":

print("\(someCharacter) is a consonant")

default:

print("\(someCharacter) is not a vowel or a consonant")

}

// swift 中的switch 内break 不是必须的, 但依然可以在case 分支中的代码执行完毕前使用break 跳出

// 每一个case 分支都必须包含至少一条语句

//: 匹配区间

let approximateCount = 62

let countedThings = "moons orbiting Saturn"

var naturalCount: String

switch approximateCount {

case 0:

naturalCount = "no"

case 1..<5:

naturalCount = "a few"

case 5..<12:

naturalCount = "several"

case 12..<100:

naturalCount = "dozens of"

case 100..<1000:

naturalCount = "hundreds of"

default:

naturalCount = "many"

}

//: 绑定元组

// 我们可以用元组在同一个switch 语句中测试多个值. 元组中的元素可以是值, 也可以是区间. 另外, 使用下划线(_)来匹配所有可能的值

let somePoint = (1, 1)

switch somePoint {

case (0, 0):

print("(0, 0) is at the orgin")

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")

}

//: 值绑定

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 an y value of \(y)")

case let (x, y):

print("somewhere else at (\(x), \(y))")

}

//: 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")

}

//: 控制转移语句

// continue, break, fallthrough, return

//: continue

// continue 语句会告诉一个循环体立刻停止本次循环迭代, 重新开始下次循环迭代

for index in 1...5 {

switch index {

case 1:

continue

default:

print(index)

}

}

//: break

// break 语句会理科结束整个控制路的执行

//: 循环语句中的break

// 当在一个循环体中使用break 时, 会立刻中断该循环体的执行, 然后跳转到表示循环体结束的大括号(})后面的第一行代码

//: switch 语句中的break

// 当在一个switch 代码块中使用break 时, 会立即中断该switch 代码块的执行, 并且跳转到表示switch 代码块结束时的大括号(})后面的第一行代码

//: fallthrough

// 使用fallthrough 来实现C 风格的贯穿特性

let integerToDescribe = 5

var description = "The number \(integerToDescribe) is"

switch integerToDescribe {

case 2, 3, 5, 7, 11, 15, 17, 19:

description += " a prime number, and also"

fallthrough

default:

description += "an integer"

}

print(description)

//: 带标签的语句

// label name: while condition { statements }

//: 检测API 是否可用

//if #availale(iOS 9, OSX 10.10, *) {

//    // 在iOS 使用iOS 9 APIs, 并且在OS X 使用OS X v10.10 APIs

//} else {

//    // 回滚到早前iOS and OS X的API

//}

//: return

// return 就是用在有返回值的方法中, 用来返回方法指定类型的值, 同时结束方法执行; 当然如果没有返回值也可以用来终止方法运行

你可能感兴趣的:(Swift 2.0 学习笔记 5_控制流)