从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