当前位置: 首页 > 编程笔记 >

Swift中的条件切换语句switch...case学习教程

督灿
2023-03-14
本文向大家介绍Swift中的条件切换语句switch...case学习教程,包括了Swift中的条件切换语句switch...case学习教程的使用技巧和注意事项,需要的朋友参考一下

语法
Swift 语言中 switch 语句的语法:


switch expression {

   case expression1  :

      statement(s)

      fallthrough /* 可选 */

   case expression2, expression3  :

      statement(s)

      fallthrough /* 可选 */

   default : /* 可选 */       statement(s); }


注意:在大多数语言中,switch 语句块中,case 要紧跟 break,否则 case 之后的语句会顺序运行,而在 Swift 语言中,默认是不会执行下去的,switch 也会终止。如果你想在 Swift 中让 case 之后的语句会按顺序继续运行,则需要使用 fallthrough 语句。
需要注意的地方有两点:
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的灵活性得到了很大提升,这是激动人心的改变,但是如果掌控不好其中的变化,可能会使你在进行错误排查时增加难度,也会使代码复杂度变高。在适当地时候灵活运用,保持头脑清晰总是有益的。

 类似资料:
  • 主要内容:switch 语句格式,嵌套 switch 语句,if 语句和 switch 语句的区别if…else 语句可以用来描述一个“二岔路口”,我们只能选择其中一条路来继续走,然而生活中经常会碰到“多岔路口”的情况。 switch 语句提供了 if 语句的一个变通形式,可以从多个语句块中选择其中的一个执行。 switch 语句格式 switch 语句是 Java 的多路分支语句。它提供了一种基于一个表达式的值来使程序执行不同部分的简单方法。因此,它提供了一个比一系列 if-else-if

  • 本文向大家介绍Swift编程中的switch...case语句实例解析,包括了Swift编程中的switch...case语句实例解析的使用技巧和注意事项,需要的朋友参考一下 Swift中的switch...case语句可以判断对象类型, Objective-C中则必须是整数。 不可以穿透,可以不写break, 因为不能穿透所以不能这么写 只能这么写 不能不写default default位置只能

  • 问题内容: 我正在学习Swift的语法,想知道为什么下面的代码无法按我期望的那样工作: 我想每次将数字除以3(3、6、9、12等)时都打印Fizz,并且每次将其除以5时都打印Buzz,那么缺少哪一块拼图? 注意:我确实使用以下方法解决了问题: 我想知道如何使用Switch解决此问题。谢谢。 问题答案: FizzBu​​zz游戏的通常规则 是用“ Fizz”替换每个3的倍数,用“ Buzz”替换每个

  • C语言虽然没有限制 if else 能够处理的分支数量,但当分支过多时,用 if else 处理会不太方便,而且容易出现 if else 配对出错的情况。例如,输入一个整数,输出该整数对应的星期几的英文表示: 运行结果: Input integer number:3↙ Wednesday 对于这种情况,实际开发中一般使用 switch 语句代替,请看下面的代码: 运行结果: Input integ

  • 很多时候 if 语句可以很好的满足我们对于分支控制的需求,但是当你要对于一系列有着相同表达式不同内容的东西分类的时应该怎么办?这正式今天要介绍的内容。 1. 语法 switch (表达式) { case 常量1: 语句1 break; case 常量2: 语句2 break; . . . defa

  • Swift 条件语句 switch 语句允许测试一个变量等于多个值时的情况。 Swift 语言中只要匹配到 case 语句,则整个 switch 语句执行完成。 语法 Swift 语言中 switch 语句的语法: switch expression { case expression1 : statement(s) fallthrough /* 可选 */