// 强大的switch,重要的是每个分支都不需要break来结束
//1、 switch可以和具体的值或是区间进行匹配
var age = 25
switch age {
case 0...11:
println("正太")
case 12...30:
println("骚年")
default:
println("大叔")
}
//2、 switch还能进行多值匹配
let name = "路飞"
switch name {
case "路飞","娜美","山治":
println("\(name)是海贼王里面的角色。")
case "漩涡鸣人","佐助","小英":
println("\(name)是火影忍者里面的角色。")
default:
println("未知漫画里面的角色。")
}
//3、 switch还能进行元组匹配
// 判断坐标所在的象限
// “_”表示所有可能的值
let pos = (2,2)
switch pos {
case (0,0):
println("坐标在原点。")
case (_,0):
println("坐标在x轴上。")
case (0,_):
println("坐标在y轴上。")
case (-3...3,-3...3):
println("坐标在长宽为6的正方形内。")
default:
println("坐标位置未知!")
}
//4、 switch还能进行值绑定,也即是将匹配的值在case程序快中进行引用
// 将height的值绑定到了常量h中
// 关键字“fallthrough”表示继续对下面的case分支进行匹配
// 正常情况下每个分支只匹配一次,它的作用就是“向下穿透”
var height = 1.73
switch height {
case let h:
println("身高:\(h)米。")
fallthrough
case 1.73:
println("匹配到1.73的case分支了。")
default:
println("嗯嗯,那啥。")
}
//5、 switch还能使用where进行额外的判断条件
// 两个case分支的匹配区间相同
// case分支的判定条件取决于后面的where语句
var height1 = 1.73
switch height1 {
case 1...3 where height1 == 1.73:
println("case 1")
case 1...3 where height1 == 2:
println("case 2")
default:
println("default君,我们又见面了。")
}