Swift编程中的switch...case语句实例解析
Swift中的switch...case语句可以判断对象类型,Objective-C中则必须是整数。
不可以穿透,可以不写break,
varrank="A"
switchrank{
case"A"://相当于if
print("优")
case"B"://相当于elseif
print("优")
case"C"://相当于elseif
print("优")
default://相当于else
print("没有评级")
}
因为不能穿透所以不能这么写
varrank1="A"
switchrank1{
case"A":
case"B":
print("优")
case"C":
print("优")
default:
print("没有评级")
}
只能这么写
varrank1="A"
switchrank1{
case"A","B"://注意OC不能这样写
print("优")
case"C":
print("差")
default:
print("没有评级")
}
不能不写default
varrank2="A"
switchrank2{
case"A":
print("优")
case"B":
print("良")
case"C":
print("差")
}
default位置只能在最后
varrank3="A"
switchrank3{
default:
print("没有评级")
case"A":
print("优")
case"B":
print("良")
case"C":
print("差")
}
在case中定义变量不用加大括号
varrank4="A"
switchrank4{
case"A":
varnum=10
print("优")
case"B":
print("良")
case"C":
print("差")
default:
print("没有评级")
}
区间和元祖匹配
varnum=10;
switchnum{
case1...9:
print("个位数")
case10...99:
print("十位数")
default:
print("其它数")
}
varpoint=(10,15)
switchpoint{
case(0,0):
print("坐标在原点")
case(1...10,10...20)://可以在元祖中再加上区间
print("坐标的X和Y在1~10之间")
case(_,0)://X可以是任意数
print("坐标的X在X轴上")
default:
print("Other")
}
值绑定
varpoint=(1,10)
switchpoint{
case(varx,10)://会将point中X的值赋值给X
print("x=\(x)")
case(varx,vary)://会将point中XY的值赋值给XY
print("x=\(x)y=\(y)")
casevar(x,y):
print("x=\(x)y=\(y)")
default:
print("Other")
}
根据条件绑定
varpoint=(100,10)
switchpoint{
//只有where后面的条件表达式为真才赋值并执行case后的语句
casevar(x,y)wherex>y:
print("x=\(x)y=\(y)")
default:
print("Other")
}
fallthrough关键字
Swift语言中的switch不会从上一个case分支落入到下一个case分支中。相反,只要第一个匹配到的case分支完成了它需要执行的语句,整个switch代码块完成了它的执行。相比之下,C语言要求你显示的插入break语句到每个switch分支的末尾来阻止自动落入到下一个case分支中。Swift语言的这种避免默认落入到下一个分支中的特性意味着它的switch功能要比C语言的更加清晰和可预测,可以避免无意识地执行多个case分支从而引发的错误。
如果你确实需要C风格的落入(fallthrough)的特性,你可以在每个需要该特性的case分支中使用fallthrough关键字。下面的例子使用fallthrough来创建一个数字的描述语句。
letintegerToDescribe=5
vardescription="Thenumber\(integerToDescribe)is"
switchintegerToDescribe{
case2,3,5,7,11,13,17,19:
description+="aprimenumber,andalso"
fallthrough
default:
description+="aninteger."
}
println(description)
//prints"Thenumber5isaprimenumber,andalsoaninteger."
这个例子定义了一个String类型的变量description并且给它设置了一个初始值。函数使用switch逻辑来判断integerToDescribe变量的值。当integerToDescribe的值属于列表中的质数之一时,该函数添加一段文字在description后,来表明这个是数字是一个质数。然后它使用fallthrough关键字来"落入"到default分支中。default分支添加一段额外的文字在description的最后,至此switch代码块执行完了。
如果integerToDescribe的值不属于列表中的任何质数,那么它不会匹配到第一个switch分支。而这里没有其他特别的分支情况,所以integerToDescribe匹配到包含所有的default分支中。
当switch代码块执行完后,使用println函数打印该数字的描述。在这个例子中,数字5被准确的识别为了一个质数。
NOTE:fallthrough关键字不会检查它下一个将会落入执行的case中的匹配条件。fallthrough简单地使代码执行继续连接到下一个case中的执行代码,这和C语言标准中的switch语句特性是一样的。