Swift中switch强大的模式匹配

Swift中switch强大的模式匹配,第1张

概述不少人觉得Swift中switch语句和C或C++,乃至ObjC中的差不多,此言大谬! 让本猫带领大家看一下Swift中switch语句模式匹配的威力. 所谓模式匹配就是利用一定模式(比如couple)去定制自己需要的匹配结果,比如以下一个3D空间的点坐标: let point3D:(x:Int,y:Int,z:Int) = (1,2,3) 我们首先做一些简单的匹配,只是简单的比较是否等于或不等于

不少人觉得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):print("The Origin")case (_,0):print("On the x-axis")case (0,_,0):print("On the y-axis")case (0,_):print("On the z-axis")default:print("other positions")}

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

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

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

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

switch(point3D){case (let x,let y,_) where y == x:    print("y = x")case (_,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强大的模式匹配所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1074393.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存