从Switch看Swift的设计思想

作者: 溪石iOS | 来源:发表于2019-01-17 23:17 被阅读6次

在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默认处理块却不允许省略:

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中,有没有发现让你会心一笑的设计?带着发现的眼光去学习,才能迅速进步哦,期待你的留言。

相关文章

网友评论

    本文标题:从Switch看Swift的设计思想

    本文链接:https://www.haomeiwen.com/subject/pvmwdqtx.html