Value Bindings (绑定值)
在switch的case中可以绑定一个或者多个值给case体中的临时常量或者变量,这个成为绑定值.
代码样例:
let anotherPoint = (2, 0)
switch anotherPoint {
case (let x, 0):
println("on the x-axis with an x value of (x)")
case (0, let y):
println("on the y-axis with a y value of (y)")
case let (x, y):
println("somewhere else at ((x), (y))")
}
// prints "on the x-axis with an x value of 2”
这个switch语句判断点是否在x-轴,在Y轴,或者其他地方.
三个case语句中都定义了常量x和y,它们临时的接收元组anotherPoint中的一个或者两个值.第一个case中,”case (let x, 0)匹配任何一个Y值是0的点,并且赋值这个点的x值给临时常 量x,同样的,第二个case中,case (0, let y)匹配任意x值为0的点,并赋值这个点的y值给临时常量y.
一旦临时常量被定义,它们就可以在case代码块中使用.
注意,这个switch语句没有默认的default case.最后的case, case let (x, y)定义了一个元组,它匹配其余值的所有情况,因此在swithc语句最终不要要个default case.
在上面的代码例子中,x和y是通过使用关键字let定义的常量,因为不需要在case代码块中修改它们的值,但是它们也可以使用var关键字定义为变量.如果这样做的话,一个临时变量将会 被创建并且初始化相应的值.这个变量的任何改变都局限在case的代码体中.
Where
一个switch case可以使用where 检查附加条件:
let yetAnotherPoint = (1, -1)
switch yetAnotherPoint {
case let (x, y) where x == y:
println("((x), (y)) is on the line x == y")
case let (x, y) where x == -y:
println("((x), (y)) is on the line x == -y")
case let (x, y):
println("((x), (y)) is just some arbitrary point")
}
// prints "(1, -1) is on the line x == -y”
这个switch语句判断点是否在绿色的线(where x == y),是否在紫色的线(where x == -y),或者其他.
Control Transfer Statements (控制跳转语句)
控制跳转语句会改变代码执行的顺序,代码从一个地方跳至另一个地方.在Swift中有四种控制跳转语句:
continue
break
fallthrough
return
这里会先讲述control, break 和 fallthrough语句,return将在函数的部分说明.
Continue
continue语句会告诉循环停止本次正在进行的循环,并开始下一次循环,它一直没有离开循环.
注意点:
在for-condition-increment循环中,调用continue语句后,仍会执行incermen的计算.循环本身仍会继续执行,只是这次循环中的代码被忽略了.
下面的代码例子演示了从一个小写字符串中移除所有元音和空格来创建一个加密的短句:
let puzzleInput = "great minds think alike"
var puzzleOutput = ""
for character in puzzleInput {
switch character {
case "a", "e", "i", "o", "u", " ":
continue
default:
puzzleOutput += character
}
}
println(puzzleOutput)
// prints "grtmndsthnklk”
上面的代码中,调用continue关键字,当匹配到一个元音或空格,就会结束本次循环并开始下一次遍历循环.这样可以确保switch代码块仅匹配(或忽略)元音和空格.