Swift中switch强大的模式匹配
2016-07-03 13:44
483 查看
不少人觉得Swift中switch语句和C或C++,乃至ObjC中的差不多,此言大谬!
让本猫带领大家看一下Swift中switch语句模式匹配的威力.
所谓模式匹配就是利用一定模式(比如couple)去定制自己需要的匹配结果,比如以下一个3D空间的点坐标:
我们首先做一些简单的匹配,只是简单的比较是否等于或不等于指定的常量:
以上switch的用法很一般,我们再看能不能更进一步:
注意以上匹配模式中的_表示我不关心对应位置的值是多少,因为第一个判断已经考虑到原点的情况,所以_不可能再为0了.
但是如果我希望能够捕获模式中对应位置的值该怎么办呢?很简单,和变量声明一样用let语句:
如果我还想进一步增加判断条件呢!?很简单,后面跟where子句:
我们可以按照实际需求自由改变模式,最后举一个例子:
让本猫带领大家看一下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强大的模式匹配
- Swift中switch强大的模式匹配
- swift之"ambiguous use of subscript"
- 来自Linkedin的Swift编程风格指南
- Swift实战——模板模式
- UIAlertController在Swift中的用法
- Swift 烧脑体操一
- iOS --- 下标和计算符重载(swift2.3)
- IOS开发笔记(Swift):利用开源类库实现检测更新功能
- SWIFT语言之多线程操作和操作队列(下)
- SWIFT语言之多线程操作和操作队列(上)
- Design Patterns in Swift:单例模式(中)
- Design Patterns in Swift:单例模式(上)
- Swift中编写单例的正确方式
- swift国际化之路(拼写错误惹的祸)
- Swift实现传值的四种方法
- Swift 柯里化(Currying)
- 一种swift编码风格指南(供参考,by linkedin)
- 一种swift编码风格指南(供参考,by linkedin)
- Swift - 使用NSURL进行数据的提交和获取(POST与GET)