不少人觉得Swift中switch语句和C或C++,乃至ObjC中的差不多,此言大谬!

让本猫带领大家看一下Swift中switch语句模式匹配的威力.

所谓模式匹配就是利用一定模式(比如couple)去定制自己需要的匹配结果,比如以下一个3D空间的点坐标:

let point3D:(x:Int,y:Int,z:Int) = (1,2,3)

我们首先做一些简单的匹配,只是简单的比较是否等于或不等于指定的常量:

switch(point3D){
case (0,0,0):print("Origin 3D")
case (1000,1000,1000):print("遥远的地方")
default:print("other positions")
}

以上switch的用法很一般,我们再看能不能更进一步:

switch(point3D){
case (0,0,0):print("The Origin")
case (_,0,0):print("On the x-axis")
case (0,_,0):print("On the y-axis")
case (0,0,_):print("On the z-axis")
default:print("other positions")
}

注意以上匹配模式中的_表示我不关心对应位置的值是多少,因为第一个判断已经考虑到原点的情况,所以_不可能再为0了.

但是如果我希望能够捕获模式中对应位置的值该怎么办呢?很简单,和变量声明一样用let语句:

switch(point3D){
case (let x,0,0):
    print("x is \(x)")
}

如果我还想进一步增加判断条件呢!?很简单,后面跟where子句:

switch(point3D){
case (let x,let y,_) where y == x:
    print("y = x")
case (_,let y,let z) where y = z*z:
    print("y = z^2")
default:break
}

我们可以按照实际需求自由改变模式,最后举一个例子:

let mode:(name:String,age:Int) = ("hopy",121)

switch(mode){
case(let name,let age) where age < 100:
    print("\(name)\(age) is very young!!!")
case(_,let age) where age < 150:
    print("Ta's age is \(age) somewhat old!!!")
default:
    print("hehe...")
}

Swift中switch强大的模式匹配的更多相关文章

  1. 窥探Swift编程之强大的Switch

    之前初识Swift中的Switch语句时,真的是让人眼前一亮,Swift中Switch语句有好多特有而且特好用的功能.说到Switch, 只要是写过程序的小伙伴对Switch并不陌生.其在程序中的出镜 ...

  2. Swift中if与switch语句使用一例

    在Swift中相同的条件处理有if和switch两个语句,我们如何取舍呢? 一种情况下我们只在乎x是否在一个范围内,但并不关心x是否穷尽!换句话说不关心在满足范围条件的其他情况下,此时我们可以考虑用i ...

  3. Switch在swift中的使用

    switch的简单使用: 相比 C 和 objective - C 中的 switch 语句,Swift 中的 switch 语句不会默认的掉落到每个 case 的下面进入 另一个 case.相反,第 ...

  4. Swift中的switch 和 do while

    switch后面的()能够省略 OC中的switch假设没有break就会穿透(依次运行),在Swift中不会穿透(可理解默认就有break) OC中入股要在case中定义变量,必要要加上{}确定作用 ...

  5. Swift 中枚举

    Swift 中枚举高级用法及实践 字数11017 阅读479 评论0 喜欢20 title: "Swift 中枚举高级用法及实践"date: 2015-11-20tags: [AP ...

  6. Swift 中范围和区间如何使用?

    虽然现在swift语言已经发展到了2.0版了,但是相信很多学习iOS开发的童鞋仍对swift语言存在各种各样的疑问,今天小编将为大家详细介绍swift中的范围和区间,下面我们一起来看看吧. Range ...

  7. 思考 Swift 中的 MirrorType 协议

    Swift中的反射非常有限,仅允许以只读方式访问元数据的类型子集.或许 Swift 因有严格的类型检验而不需要反射.编译时已知各种类型,便不再需要进行进一步检查或区分.然后大量的 Cocoa API ...

  8. 一览Swift中的常用关键字

    要学习Swift这门语言,就必须先了解Swift的关键字及对应的解释.这里就列一下在Swift中常用到的关键字. 关键字是类似于标识符的保留字符序列,除非用重音符号(`)将其括起来,否则不能用作标识符 ...

  9. [翻译]理解Swift中的Optional

    原文出处:Understanding Optionals in Swift 苹果新的Swift编程语言带来了一些新的技巧,能使软件开发比以往更方便.更安全.然而,一个很有力的特性Optional,在你 ...

随机推荐

  1. [COGS 2258][HZOI 2015]复仇的序幕曲

    Description 你还梦不梦痛不痛,回忆这么重你怎么背得动 ----序言 当年的战火硝烟已经渐渐远去,可仇恨却在阿凯蒂王子的心中越来越深 他的叔父三年前谋权篡位,逼宫杀死了他的父王,用铁血手腕平 ...

  2. codeforces 815C Karen and Supermarket

    On the way home, Karen decided to stop by the supermarket to buy some groceries. She needs to buy a ...

  3. 【BZOJ1059】【ZJOI2007】矩阵游戏

    Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两 ...

  4. Codeforces Round #407 (Div. 1)

    人傻不会B 写了C正解结果因为数组开小最后RE了 疯狂掉分 AC:A Rank:392 Rating: 2191-92->2099 A. Functions again 题目大意:给定一个长度为 ...

  5. hdu 5427(水)

    题意:按照年龄从小到大排序 名字中可能有空格什么的,处理下即可 #include<iostream> #include<cstdio> #include<cstring& ...

  6. 51Nod 1326 遥远的旅途

    题目描述: 一个国家有N个城市,这些城市被标为0,1,2,...N-1.这些城市间连有M条道路,每条道路连接两个不同的城市,且道路都是双向的.一个小鹿喜欢在城市间沿着道路自由的穿梭,初始时小鹿在城市0 ...

  7. hdu 4123 树的最长路+RMQ

    Bob’s Race Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. rsync 系统用户/虚拟用户 备份web服务器数据及无交互定时推送备份

    一.服务环境 (1),WEBserver(192.168.10.130) : BACKserver(192.168.10.129) (2),BACKserver服务器部署,安装所需软件,并启动 (3) ...

  9. Python3玩转儿 机器学习(4)

      jupyternotebook 的使用方法¶   最基本的使用¶ In [1]: 1+2 Out[1]: 3   菜单树¶   File¶ |------> New Notebook --- ...

  10. Linux学习之CentOS(十三)-----磁盘管理之 磁盘与目录的容量(转) df 与du 命令

    磁盘与目录的容量 现在我们知道磁盘的整体数据是在 superblock 区块中,但是每个各别文件的容量则在 inode 当中记载的. 那在文字接口底下该如何叫出这几个数据呢?底下就让我们来谈一谈这两个 ...