语法
Swift 语言中 switch 语句的语法:
switch expression { case expression1 : statement(s) fallthrough /* 可选 */ case expression2, expression3 : statement(s) fallthrough /* 可选 */default : /* 可选 */ statement(s); }
支持多种数据类型
在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里同样可以用区间运算符:
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)
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" }
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)" }
支持额外的逻辑判断
在使用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的灵活性得到了很大提升,这是激动人心的改变,但是如果掌控不好其中的变化,可能会使你在进行错误排查时增加难度,也会使代码复杂度变高。在适当地时候灵活运用,保持头脑清晰总是有益的。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。