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

语法
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的灵活性得到了很大提升,这是激动人心的改变,但是如果掌控不好其中的变化,可能会使你在进行错误排查时增加难度,也会使代码复杂度变高。在适当地时候灵活运用,保持头脑清晰总是有益的。

时间: 2024-10-06 03:17:16

Swift中的条件切换语句switch...case学习教程_Swift的相关文章

Swift中Optional值的链式调用学习笔记_Swift

Swift中的Optional值有这样的特性,当对其进行可选拆包时,即使用?进行Optional类型值的取值时,如果Optional值不为nil,则会返回原始类型的数据值,如果为nil,则会返回nil.因此,当使用?对Optional拆包后进行方法.属性或者下标的调用时,如果有值,则会成功相应调用,如果没有值,则会调用失败,返回nil. 注意:使用!则会进行强制拆包,这时如果Optional值为nil,则会出现运行时错误,因此开发者在使用!进行强制拆包时,必须确认Optional类型值不为nil

PHP开关语句Switch case学习笔记

PHP 中的 Switch 语句用于执行基于多个不同条件的不同动作.如果你希望有选择地执行若干代码块之一,请使用 Switch 语句. switch语法  代码如下 复制代码 switch (expression)  //设置表达式 { case label1: //比较标签1的值  code to be executed if expression = label1; //如果匹配输出关联的代码  break; //结束代码跳出语句 case label2: //比较标签1的值  code t

详解Python中的条件判断语句

  这篇文章主要介绍了Python中的条件判断语句,是Python入门中的基础知识,需要的朋友可以参考下 一个else语句可以使用if语句结合起来.如果在if语句中的条件表达式解析为0或false值,那么else语句包含代码执行. else语句是可选的声明,并if语句下面最多只有一个else语句. 语法: if ... else语句的语法是: ? 1 2 3 4 if expression: statement(s) else: statement(s) 例子: ? 1 2 3 4 5 6 7

JavaScript中的条件判断语句使用详解

这篇文章主要介绍了JavaScript中的条件判断语句使用详解,是JS入门学习中的基础知识,需要的朋友可以参考下 在写一个程序,可能有一种情况,当你需要采用一个路径出给定两个路径.所以,需要使用条件语句,让程序来做出正确的决策和执行正确的行动. JavaScript支持其用于执行根据不同的条件不同的操作条件语句.在这里,我们将解释if..else语句. JavaScript支持if..else语句的形式如下: if 语句 if...else 语句 if...else if... 语句. if 语

Flash Switch Case实例教程

Flash Switch  Case实例教程 厌倦了无休止的,如果...别的吗? Flash MX中增添了一个新的方式处理这个问题:开关.这一指示中已经存在的一些语言(脚本语言, PHP的角.. ) ,并允许您表达和评价作为一种替代,如果/人. 该教程 事实上,交换机( )不会带来什么新的脚本.它只是一种方式,如果写/别人有所不同.其工作原理如下: 您确定您有什么评价之间的( )的开关. 之间的( )的开关,您将采取行动,履行在特定情况下,也就是说当表达的情况下被评价为严格平等的表达,你"交换&

Swift中的条件判断、循环、跳转语句基础学习笔记_Swift

一.引言 一种编程语言的强大与否,很大程度上取决于其提供的程序流程控制方案,就如使用汇编语言实现复杂的程序流程是一件痛苦的事情.Swift中提供了许多强大的流程控制语句,例如快速遍历for-in,while循环,repeat-while循环,switch选择等,需要注意的是,在Swift2.2中,for(a;b;c)循环已经被弃用掉,并且Swift中的Switch语句也更加强大,可以处理任意数据类型. 二.for-in循环 配合范围运算符,for-in循环可以用来执行确定次数的循环,示例如下:

详解C++编程中的条件判断语句if-else与switch的用法_C 语言

if-else 语句控制条件分支. 语法 if ( expression ) statement1 [else statement2] 备注 如果 expression 的值不为零,执行 statement1 .如果选项 else 存在,如果 expression 的值为零,执行 statement2. 表达式必须是算术或指针类型,或者必须是定义明确的整型或指针类型转换的类类型.有关转换器的信息,请参见标准转换. 在两个形式的 if 语句和 expression 语句中计算,可以具有除结构以外的

详解Swift中的Characters字符类型与String字符串类型_Swift

一.引言 Swift中提供了String类型与Characters类型来处理字符串和字符数据,Swift中的String类型除了提供了许多方便开发者使用的方法外,还可以与Foundation框架的NSString类进行转换,使用起来十分方便. 二.String基础 在Swift中,使用双引号来定义字符串,开发者可以通过如下代码来创建一个字符串常量: let str = "Hello, playground" 可以通过下面两种方式来创建空字符串: let str1 = "&qu

Swift语言中的函数学习教程_Swift

函数是一个组织在一起语句集合,以执行特定任务.Swift 函数类似于简单 C 函数以及复杂的 Objective C 语言函数. 它使我们能够通过函数调用内部的局部和全局参数值. 像其他任何语言一样 swift 函数也遵循相同的步骤. 函数声明:它告诉编译器有关的函数的名称,返回类型和参数. 函数定义:它提供函数的实际主体. Swift 函数包含参数类型和返回类型. 函数定义在Swift 语言中函数是由 "func" 关键字来定义.当一个新定义函数时,它可能需要一个或几个值作为函数输入