之前初识Swift中的Switch语句时,真的是让人眼前一亮,Swift中Switch语句有好多特有而且特好用的功能。说到Switch, 只要是写过程序的小伙伴对Switch并不陌生。其在程序中的出镜率还是比较高档。Switch属于程序的分支语句,Switch的功能便于处理多个分支的较为复杂点的逻辑分支。能用Switch实现的代码都可以使用多个if-else分支语句进行替换。

  今天这篇博客就是要看一下Swift中的Switch的不同之处,来总结一下Switch不同的特性。在Swift语言中的Switch中,你可以匹配数字,字符串,元组,字符区间等。并且还可以进行数值绑定,以及在case中使用where子句(SQL中经常使用Where子句)。默认的Switch语句中是不需要添加break语句的,因为其默认就是只执行一个case语句就结束,除非你添加上fallthrough。具体的内容还是看下方的小实例吧。

  

一、Switch语句的匹配类型

    Switch语句不仅像其他语言那样支持匹配数字,在Swift语言中的Switch还支持其他现代编程语言所不支持的数据类型,比如字符串,元组,字符区间等。下方会通过一系列的实例来介绍一下Switch语句的用法。在Switch语句中,默认是执行一条符合的case就结束整个Switch语句,如果你想移除执行多个case子句,后面的部分会介绍到。Switch和枚举一般是形影不离的,鉴于本篇博客是介绍Switch语句的,所以我们就不使用枚举定义匹配项了,不过在正式开放中,最好还是把匹配项定义成枚举的形式,关于Swift中的枚举的内容请参考前面发布的一片博客《窥探Swift之别样的枚举类型

    1.使用Switch匹配数字

      使用Switch匹配数字这部分和其他语言一样,不过Swift中的Switch是不需要使用break语句的,因为其默认执行完匹配项就跳出Switch语句了。下方是把数字1,2,3转换成“老大”,“老二”,“超生了”的字符串。由实例可知,匹配完 2 后,即使没加break语句,也不会继续执行后边的case语句了,这一点还是比较人性化的。实例比较简单,就不做过多赘述了。

    2.使用Switch匹配字符串

      这是一个非常值得兴奋的一个特性,在其他一些编程语言中(比如OC)是不支持匹配字符的。在Swift中的Switch语句就支持匹配字符串。下方是一个匹配美女的Switch-case的一个实例,如果你碰到“凤姐”这样的大“美女”,那么你就只能呵呵啦~。请看下方实例:

    3.使用Switch语句匹配数字区间

      这个特性也是灰常不错的,在Swift中有区间运算符(1...5 表示1到5这个区间中的所有整数)。如果匹配的值是整数,那么我们可以在Case匹配条件中使用区间。下方就是一个匹配数字区间的一个实例,salary是月薪,我们将通过这个月薪分一下等级,这时我们就会用到区间了。具体如下:

  

    4.匹配元组

      元组可以可以作为case的条件的,元组在case中的用法还是比较灵活的。在case条件中,我们可以使用下划线来忽略元组中的某一项。并且我们还可以在元组中的一些项中使用区间运算符。在元组匹配中如果你想忽略掉元组中的一项,可以使用下划线进行忽略即可。下方就是一个元组匹配的实例,如下所示。

      上面的例子是在匹配元组时忽略不需要匹配的元组匹配项,接下来我们还可以把不匹配的值通过参数的形式传到case后方的子语句块中。这也就是Switch中的数值绑定,具体实例如下所示:

二、Where子句

    在SQL中Where子句的出镜率是比较高的,但是出现Switch-Case分支语句中实不多见。Where子句在SQL中后面跟的是条件,在Switch-Case中的Where子句也是如此,后方跟的也是条件。Where子句要结合着上方的介绍的数值绑定来使用,加上Where子句,Swith-Case分支语句的功能就更为强大,可谓是提升了一个能量级。下方是在元组匹配中结合数值绑定使用Where子句,Case和Where后的条件都满足时才会执行该Case后方的语句块。具体实例如下:

    上面的实例是在元组匹配中结合着数值绑定来使用的Where子句,下方我们是在字符串匹配中使用Where子句。道理是一样的,就不做过多赘述了,直接代码走起:

    Switch-Case语句中引入Where子句可谓是完全可以替代if - else 语句的分支。Where子句使得Switch-Case语句中的条件更为灵活多变,使其更为强大。这一点也是Swift中Switch的强大之处。

  今天的博客就先到这儿,关于if-esle分支语句,for, while等循环语句就不做过多赘述了。因为其比较较简单,没有太多让人眼前一亮的东西。

窥探Swift编程之强大的Switch的更多相关文章

  1. 窥探Swift编程之别样的HelloWorld

    从今天就开始陆陆续续的发布一些有关Swift语言的东西,虽然目前在公司项目开发中Objective-C还是iOS开发的主力军,但是在不久的将来Swift将会成为iOS开发中的新生宠儿.所以在在Xcod ...

  2. 窥探Swift编程之错误处理与异常抛出

    在Swift 2.0版本中,Swift语言对其错误处理进行了新的设计,当然了,重新设计后的结果使得该错误处理系统用起来更爽.今天博客的主题就是系统的搞一下Swift中的错误处理,以及看一下Swift中 ...

  3. 窥探Swift系列博客说明及其Swift版本间更新

    Swift到目前为止仍在更新,每次更新都会推陈出新,一些Swift旧版本中的东西在新Swift中并不适用,而且新版本的Swift会添加新的功能.到目前为止,Swift为2.1版本.去年翻译的Swift ...

  4. Swift编程权威指南第2版 读后收获

    自从参加工作一直在用OC做iOS开发.在2015年的时候苹果刚推出swift1.0不久,当时毕竟是新推出的语言,大家也都很有激情的学习.不过在学完后发现很难在实际项目中使用,再加上当时公司项目都是基于 ...

  5. 窥探Swift之协议(Protocol)和委托代理(Delegate)回调的使用

    协议与委托代理回调在之前的博客中也是经常提到和用到的在<Objective-C中的委托(代理)模式>和<iOS开发之窥探UICollectionViewController(四) - ...

  6. 窥探Swift之类的继承与类的访问权限

    上一篇博客<窥探Swift之别具一格的Struct和Class>的博客可谓是给Swift中的类开了个头.关于类的内容还有很多,今天就来搞一下类中的继承以及类的访问权限.说到类的继承,接触过 ...

  7. 窥探Swift之别具一格的Struct和Class

    说到结构体和类,还是那句话,只要是接触过编程的小伙伴们对这两者并不陌生.但在Swift中的Struct和Class也有着令人眼前一亮的特性.Struct的功能变得更为强大,Class变的更为灵活.St ...

  8. 窥探Swift之需要注意的基本运算符和高级运算符

    之前更新了一段时间有关Swift语言的博客,连续更新了有6.7篇的样子.期间间更新了一些iOS开发中SQLite.CollectionViewController以及ReactiveCocoa的一些东 ...

  9. 窥探Swift编程之在Playground上尽情的玩耍

    自从苹果公司发布Swift的时候,Xcode上又多了一样新的东西---"Playground".Playground就像操场一样,可以供我们在代码的世界里尽情的玩耍,在本篇博客中就 ...

随机推荐

  1. git回滚错误提交

    git log //找到你要回滚的那次提交 比如:43596f6b1f57157e627c25ae7a843f60157ac52d git reset --hard HEAD~43596f6b1f57 ...

  2. js中字符串相关知识点总结

      有引号就是字符串类型 空格也算长度 字符串的length不可写 typeof 判断数据类型 var s="a bcadde你好" // alert(typeof s)      ...

  3. 一些gcd计数问题

    数论什么的全都忘光了吧QAQ 做了几道简单的题练习一下. bzoj1101: [POI2007]Zap 求有多少对数满足 gcd(x,y)=d, 1<=x<=a, 1<=y<= ...

  4. jQuery图片滚动插件

    //该组件目前仅适用于一次移动一张图片的情况 (function ($) { $.fn.extend({ "scroll": function (options) { option ...

  5. 破除Odoo 菜单栏提示 99+

    菜单栏提示利用的menu对象的needaction_counter属性,默认只能显示99个 多于99则显示99+ 如果希望显示完整的数字,则需要改动如下两个地方. 一.menu菜单的显示限制: 将第一 ...

  6. Sort with Swap(0, i)

    原题连接:https://pta.patest.cn/pta/test/16/exam/4/question/678 题目如下: Given any permutation of the number ...

  7. bfs判断连通图(无向)

    在图论中,连通图基于连通的概念.在一个无向图 G 中,若从顶点vi到顶点vj有路径相连(当然从vj到vi也一定有路径),则称vi和vj是连通的.如果 G 是有向图,那么连接vi和vj的路径中所有的边都 ...

  8. 工作总结_JS_1

    获取点击下的相对应的div: $('> div', this).show(); 本身同级下的相对应的div:   $('>div[name=vv]', $(this).siblings(& ...

  9. JQuery 获取父级元素、同级元素、子元素等

    例: <div> <div id="div_1">这是内容1</div> <div id="div_2">这是内 ...

  10. mysql之触发器trigger

    触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...