swift之switch介绍
来源:互联网 发布:top域名备案 编辑:程序博客网 时间:2024/04/30 12:45
Switch简介
Switch作为选择结构中必不可少的语句也被加入到了Swift中,只要有过编程经验的人对Switch语句都不会感到陌生,但苹果对Switch进行了大大的增强,使其拥有其他语言中没有的特性。使用Switch语句很简单:
var i = 0 switch i { case 0: "0" //被输出 case 1: "1" default: "2" }
在这个最简单的Switch语句中,与其他语言很不同的一点是:不用显式的加上break。Swift的Switch语句会自动在case结尾处加上break,执行完满足条件的case部分后,就自动退出了。但是在某些情况下,我们可能会希望Switch能同时执行两条case,那么可以这样:
var i = 3 switch i { case 0,3: "0" //被输出 case 1: "1" default: "2" }
在case后的多个条件中,用逗号隔开即可。
如果就是想执行完一条case之后,想继续执行下一条case,就要用到一个新的关键字:
var i = 0 switch i { case 0: "0" //被输出 fallthrough case 1: "1" //被输出 case 2: "2" default: "default" }
使用新的关键字fallthrough能使Switch在执行完一个case之后,紧接着执行下一条case。
Swift的Switch语句一定要涵盖所有的情况,这并不是说一定要有default,只要上面的case能满足所有的情况,就可以不用写default。
需要注意的地方有两点:
- Switch当然也支持显式的break,通常只有一种情况下你会这么做,那就是当你也不想在default里做任何事情的时候,这个时候你就可以在default里显式地加上一句break。
- fallthrough并不是在任何情况下都有效,当你在Switch里使用Value Binding技术的时候,fallthrough就被禁止了。Value Binding在下面会讲到。
支持多种数据类型
在Objective-C里,Switch语句只能支持整形的数据(或者一个字符),但是在Swift里,Switch能支持多种数据类型,包括浮点、布尔、字符串等:
支持浮点:
let float = 1.5 switch float { case 1.5: "1.5" //被输出 default: "default" }
支持布尔:
let isSuccess = true switch isSuccess { case true: "true" //被输出 default: "default" }
支持字符串:
let name = "Bannings" switch name { case "Bannings": "Bannings" //被输出 default: "default" }
可以说是史上支持数据类型最多的Switch了。
支持区间运算符
不仅仅是循环结构里可以用区间运算符,在Switch里同样可以用区间运算符:var i = 15 switch i { case 0 ... 10: "0~10" case 11 ... 20: "11~20" //被输出 default: "default" }
对某个数值区间进行批量匹配,这样是不是很酷?浮点数也同样支持区间运算符。
支持元组
作为被大大增强的Switch,元组也是被支持的:
let request = (true,"success") switch request { case (true, "success"): "success" //被输出 case (false, "failed"): "failed" default: "default" }
使用元组和使用其他数据类型一致,不过元组还有一项特点,对于不想关心的值,可以用下划线_跳过,如:
let (name, _, age) = ("Bannings" ,true, 22)
那么在使用Switch时,同样支持这项特性:
- let request = (true,"success")
- switch request {
- case (_, "success"):
- "success" //被输出
- case (false, _):
- "failed"
- default:
- "default"
- }
let request = (10,"failed") switch request { case (_, "success"): "success" case (1 ... 10, _): "1~10" //被输出 default: "default" }
Value Binding
针对元组,Switch还支持类似于Optional Binding的Value Binding,就是能把元组中的各个值提取出来,然后直接在下面使用:let request = (0,"success") switch request { case (0, let state): state //被输出:success case (let errorCode, _): "error code is \(errorCode)" } // 涵盖了所有可能的case,不用写default了
这样也是可以的:
let request = (0,"success") switch request { case let (errorCode, state): state //被输出:success case (let errorCode, _): "error code is \(errorCode)" }
把let放在外面和放在里面为每一个元素单独写上let是等价的。
当你在一个case里使用Value Binding的时候,如果你同时也在它的上一个case里使用了fallthrough,这是编译器所不允许的,你可能会收到这样一个编译错误:
只要把下面的errorCode去掉就行了,当然,考虑好自己的逻辑。
支持额外的逻辑判断
在使用Switch语句时,Switch会适当地导向相应的case部分,这其实就相当于做了一次逻辑判断,但Swift的Switch语句还支持额外的逻辑判断:
let request = (0,"success") switch request { case (0, let state) where state != "success": state case (let errorCode, _): "error code is \(errorCode)"//被输出:"error code is 0" }
这同样很酷,相信在某种情况下会派上大用场。
总结
Swift对Switch进行了大大增强,使Switch的灵活性得到了很大提升,这是激动人心的改变,但是如果掌控不好其中的变化,可能会使你在进行错误排查时增加难度,也会使代码复杂度变高。在适当地时候灵活运用,保持头脑清晰总是有益的。
0 0
- swift之switch介绍
- Swift Switch介绍
- swift switch介绍
- Swift之switch使用
- Swift之旅 switch用法
- Swift控制语句之switch-case
- swift switch
- swift switch
- swift之switch续(元组,值绑定,where)
- Object-C--->Swift之(四)强大的Switch
- 二 swift之switch condition evaluates to a constant
- swift基本语法(总结提炼版)之005 Swift之 switch循环
- Switch in Swift
- swift-switch用法
- Swift Enum与Switch
- swift switch Double
- iOS-Swift-switch
- swift switch选择结构
- 关于 tomcat 集群中 session 共享的三种方法
- 【排序算法2】冒泡排序
- 使用AIDL实现进程间的通信
- ubuntn上安装google chrome浏览器
- STL源码剖析(3):迭代器(iterators)
- swift之switch介绍
- 二级联动下拉列表JS+html实现
- eclipse安装SVN插件----网上资料的坑爹系列
- VS2008中编译和使用OpenSSL
- 日语学习之沪江N3基础 20150619 -5
- 修改ipa
- CSS Font-Size: em、px 、pt 、Percent之间的关系及换算
- spring mvc结合mybaits,多数据源切换!
- PATBasic——1007. 素数对猜想 (20)