在Swift中,“普通”switch分支结构长这样:
func nameOfIndex(index:Int)->String {
var str:String
switch index {
case 1:
str = "One"
case 2:
str = "Two"
default:
str = "None"
}
return str
}
细心的你一定会指出,哥们,你这代码有错误吧,没加break呀?
你没错,不过我也没错,在Swift中,每个case不加break,也不会自动执行下一个case块
,可以省去break的同时,default默认处理块却不允许省略
:
看到这里,是不是感到Chris Lattner大神简直把编程老师的尊尊教诲直接设计进了Swift语法,要知道他老人家可是Clang 编译器的作者,C语言用的飞起,想必他是吃够了break和default的苦呀。
Chris Lattner: 哀家还不老,身材棒棒哒
大神可没有在这里停下脚步,于是他又端上一道好菜:
func priceOfCombo(name:String)->Float {
var price:Float = 0.0
switch name {
case "Roasted chicken burger combo":// 黄金烤鸡腿堡套餐
price = 22
case "Mini burger combo":// 田园脆鸡堡餐
price = 18
case "Extra tasty crispy burger combo":// 劲脆鸡腿堡餐
price = 22
case "Zinger burger combo":// 香辣鸡腿堡餐
price = 22
case "Mexican Twister combo":// 墨西哥鸡肉卷餐
price = 17
case "Dragon Twister combo":// 老北京鸡肉卷餐
price = 17
case "Bucket meal":// 外带全家桶
price = 96.0
case "Kid’s meal"://快乐儿童餐
price = 74.5
default:
price = 0.0
}
return price
}
是的,你没看错,case的条件可以用字符串了
👏👏👏,从此和字典的Key可以无障碍勾搭在一起了。
以为这就够了(反正我当时是心满意足了),结果还有加餐:
var speed = 50
switch speed {
case 0:
print("stop")
case 0...40:
print("slow")
case 41...70:
print("normal")
case 71..<101:
print("fast")
default:
print("not classified yet")
}
嗯,case条件还可以是一个范围
:
41...70
表示从41到70,包括41和70;
71..<101
表示从71到69,不包括101。
这在OC里是无法想象的事情了。
同样无法想象的还有:
switch index {
case 1, 2, 3:
str = "Small"
case 4, 5, 6:
str = "Big"
default:
str = "None"
}
一个case条件中,可包含多个并列条件
。
好了,到这里一个优秀又严谨的switch介绍完了,大神到底是C家出生,还是没有忘记C语言的一些灵活性,如果你确实需要连续执行两个case块,还是可以用fallthrough
来达到“穿透”效果的:
let index = 1
switch index {
case 1:
str = "One"
fallthrough
case 2:
str = "Two"
default:
str = "None"
}
上面例子中str最后的值为“Two”。
从switch设计可以看出,大神对Swift的期望
既保持编写代码的灵活性,又将传统语言的一些编程“习惯”规范化,减少语法本身带来的失误。
令无数开发者对Swift的未来充满期待。
思考题
你在使用Swift中,有没有发现让你会心一笑的设计?带着发现的眼光去学习,才能迅速进步哦,期待你的留言。
网友评论