switch与其他语言的显著区别
1)被执行到的case中会自动break,即使没有显示的写break语句,
满足一个caes后也不会继续执行下一条case,当然如果写C语言写习惯了,手动加上break也可以。
2)可以有多个条件语句
3)可以使用range类型变量
4)可以使用元组类型作为switch
5)再case中可以使用where语句,添加判断条件
6) switch中如果确实想执行完一条case后,继续想执行下一条case的话,可以用fallthrough语句
var char ="a"
switch( char )
{
case"A":
println("A") //每个case必须有一条语句
case"a","A": //可以判断多个条件,满足任何一个可执行
println("a")
case"B","a": //满足了上面的条件,不会再继续向下执行,此句不执行
println("B or a")
default:
println("default")
}
// case 中可以是一个范围
var data =3
switch(data)
{
case1...6:
println("This is a range")
default:
println("other data")
}
//可以使用元组来测试多个值,也可以使用_来匹配任意值
var point = (1,4) //case中只能匹配有两个数据的坐标tuple
switch point
{
case (1,2):
println("array (1,2)")
case (1,_):
println("array (1, any int)")
case (1...3,4...6)://也可以使用range
println("array data is range")
default:
println("other data")
}
// case中允许值绑定 value binding
// 如下面的例子,数据被第一个case拦截,并绑定到x中,下面的case 1:语句不能执行。
var dat =1
switch dat
{
case var x:
println(" The data is\(dat)!")
case 1:
println("test")
}
//当switch的是元组的时候比较有用,可以验证其他的值并取得想要的值。
var tplpoint = (1,2,3)
switch tplpoint
{
case (let x,2,3):
println("x is\(x)")
case (_,_,_):
println("test")
}
// case语句中可以使用where条件来添加附加内容
switch tplpoint
{
case (let x,let y,3)where x==y:
println("坐标x等于y坐标")
case (let x,let y,3)where y>x:
println("y > x")
default:
println("default")
}
// case语句中可以使用fallthrough来强制穿墙
switch tplpoint
{
case (let x,let y,3) where y>x:
println("y > x")
fallthrough
default:
println("default")//即使满足第一个条件后,因为有fall through语句,所以可以穿墙
}