窥探Swift编程之强大的Switch

  之前初识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等循环语句就不做过多赘述了。因为其比较较简单,没有太多让人眼前一亮的东西。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安富莱v6开发板网口通讯_安富莱嵌入式周报第170期:2020.07.202020.07.26

说明:谢谢大家的关注,继续为大家盘点上周精彩内容。1、沁恒推出带USB3.0,千兆以太网,光纤接口的RISC内核单片机CH569 CH569/565 微控制器使用 RISC-V3A 内核, 支持 RISC-V 指令的 IMAC 子集。片上集成超高速USB3.0主…

连续子数组的最大和

有一个整数数组,求出连续子数组的和的最大值。有一个首尾相连的整数数组,求出连续子数组的和的最大值。在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。1、思路: 动态规划思路:用函数f(i)表…

WPF中设置了WindowStyle=None后,窗口仍然有边框的解决方法

1. 设置了窗体的WindowStyle"None",窗口还是右边框,如下图: 2. 这是因为窗体默认是可以改变大小的,所以需要修改ResizeMode的值 ResizeMode"NoResize", 这样设置后,上图中的边框就没有了

两度破译“白宫密码”,让美国政府部门崩溃,却称自己是抱娃敲代码的普通妈妈

全世界只有3.14 % 的人关注了爆炸吧知识抱娃敲代码称成功是幸运而已今天我们来点正经的,来跟大家分享一位乘风破浪的姐姐--王小云教授。自踏入2020年以来,山东大学网络空间安全学院(研究院)院长,双聘院士、讲席教授王小…

github java开源项目经验_10月份Github上最热门的Java开源项目

10 月份 GitHub 上最热门的Java开源项目排行已经出炉啦,在本月的名单中,实战项目类居多,当然也有像JavaGuide这样学习指南类项目,下面就是本月上榜的10个开源项目:1、Java(Star 18468)https://g…

浙江移动无线dns服务器地址,浙江移动4g的dns服务器地址

浙江移动4g的dns服务器地址 内容精选换一换当创建文件系统后,您需要使用云服务器来挂载该文件系统,以实现多个云服务器共享使用文件系统的目的。本章节以Windows 2012版本操作系统为例进行NFS文件系统挂载,其他版本请参考以下主要步骤根据实际…

Android之给gridview的单元格加上分割线

有时候需要给gridview加上分割线,没有现成的解决方案,这里写好一个可以直接用的自定义gridview,就叫做LineGridView吧。先上图,zaker客户端第三方分享的gridview样式: 可以看到靠边的格子都是半封闭的,要实…

Azure Machine Learning - 如何使用 GPT-4 Turbo with Vision

介绍如何在Azure中使用GPT-4 Turbo with Vision 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理…

系统命名与 SQL 命名之争 - 第 1 部分

创建数据库对象的命名规范 创建数据库对象时,开发人员可以选择一种命名方法,可以选择遵循传统 IBM i 行为的系统命名模式 (*SYS),也可以选择遵循SQL 标准规则的 SQL 命名规范 (*SQL)。 DB2 for i 与其他数据库管理系统 (DBMS) 之间的主要差别…

C++ const 关键字使用

2019独角兽企业重金招聘Python工程师标准>>> 为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号…

论大象如何装进冰箱

全世界只有3.14 % 的人关注了爆炸吧知识在这美好的一天,想和大家讨论一个有趣的数学话题:怎么才能将一只大象装进冰箱呢?数学的方法把大象放到冰箱里的分析学方法1)先把大象微分,然后把它放到冰箱里,再在冰…

2020下半年新机最新消息_提前剧透 2020 年下半年五大新机

华为 Mate40系列 美帝一系列封杀骚操作,并没有影响到华为手机下一代的处理器——台积电代工的、采用了 5nm 进程的 Mate40 处理器——麒麟 1020。为了 3D 脸部识别,可能还是采用刘海屏。Mate40 Pro 的曲率更大,正面屏幕的视觉冲击更加震撼&am…

手把手教你学Dapr - 5. 状态管理

介绍使用状态管理,您的应用程序可以将数据作为键/值对存储在支持的状态存储中。您的应用程序可以使用 Dapr 的状态管理 API 使用状态存储组件来保存和读取键/值对,如下图所示。例如,通过使用 HTTP POST,您可以保存键/值对&#xf…

Android之drawlayout使用和总结

DrawLayout 今天发的Android之SlidingMenu博客之后,有人说out了,说用DrawLayout,我插,被叼了,然后我就到网上查drawLayout是什么?原来是侧滑菜单,好吧,赶快学习下,网上很多例子,都不怎么全面,然后找了找了呀,终于找到到了个成形的,然后自己改了下,不说了,先爆照 …

eclipse 汉化教程(语言包)

Eclipse 汉化图形教程此教程仅仅以links方式安装eclipse插件,且接下来主要以eclipse安装语言包为例,如果教程过程中哪里不对,请指出,谢谢。因使Eclipse版本太多,我这里就以eclipse3.5.2为例,讲讲如何将其汉…

4. MyBatis几个可以优化的地方

与其说是优化, 还不如说是让配置更简单.一: 连接数据库的配置单独放到一个属性文件中在 src 路径下新建一个 db.properties 属性文件, 并把数据库连接信息放入文件中, 然后在 conf.xml 文件中导入属性文件引用就可以了, 这样更好管理.1. 新建 db.properties 文件2. 写入属性信息…

免费使用的支付宝,到底是怎么一年赚1206亿的?

全世界只有3.14 % 的人关注了爆炸吧知识眨眼间,马云居然退休已经一年了,真可谓白驹过隙,恍惚而逝啊!不过,你以为马云退休了,就清风明月,万事不管了。太年轻!其实马云依旧掌控者蚂蚁集…

C#中使用opencv处理图像

OpenCV(Open Source Computer Vision Library)是一个(开源免费)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android、ios等操作系统上,它轻量级而且高效---由一系列C函数和少量C类构成,同时提供了Python、Ruby、MATLAB等语言的接口…

php psr 编码规范_PHP之PSR-4规范:自动加载

1. 概述本 PSR 是关于由文件路径 自动载入 对应类的相关规范,本规范是可互操作的,可以作为任一自动载入规范的补充,其中包括 PSR-0,此外,本 PSR 还包括自动载入的类对应的文件存放路径规范。关于「能愿动词」的使用为了…

两台服务器虚拟成一个ip地址,两台服务器如何用一个ip地址

两台服务器如何用一个ip地址 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。检查Pkey是否一致。查看弹性云服务器内部分配到的Pkey…