从0开始入门学习Swift 07 switch case 与 fallthrough

1.switch case

switch 语句会尝试把某个值与若干个模式(pattern)进行匹配。根据第一个匹配成功的模式,switch 语句会执行对应的代码。当有可能的情况较多时,通常用 switch 语句替换 if 语句。switch 默认没有贯穿效果。

var a = "胡辣汤"

    switch a {
    
        case "胡辣汤":
            print("今天的早饭是胡辣汤 \n")
            
        case "重庆小面":
            print("今天的早饭是重庆小面")
            
        default:
            print("今天没吃早饭")
    }

switch 语句必须是完备的。这就是说,每一个可能的值都必须至少有一个 case 分支与之对应。在某些不可能涵盖所有值的情况下,你可以使用默认(default)分支来涵盖其它所有没有对应的值,这个默认分支必须在 switch 语句的最后面。

	//下面的例子使用 switch 语句来匹配一个名为 someCharacter 的小写字符:
	let someCharacter: Character = "z"
	
	switch someCharacter {
	
	case "a":
	    print("The first letter of the alphabet")
	    
	case "z":
	    print("The last letter of the alphabet")
	    
	default:
	    print("Some other character")
	    
	}
	// 输出“The last letter of the alphabet”

本小结来源于Swift5.1中文教程


2.fallthrough 贯穿

在 Swift 里,switch 语句不会从上一个 case 分支跳转到下一个 case 分支中。相反,只要第一个匹配到的 case 分支完成了它需要执行的语句,整个 switch 代码块完成了它的执行。相比之下,C 语言要求你显式地插入 break 语句到每个 case 分支的末尾来阻止自动落入到下一个 case 分支中。Swift 的这种避免默认落入到下一个分支中的特性意味着它的 switch 功能要比 C 语言的更加清晰和可预测,可以避免无意识地执行多个 case 分支从而引发的错误。

以一个简单的例子来展示一下fallthrough的贯穿效果

//含有fallthrough
    var b = 10

    print("含有fallthrough:")

    switch b {
        case 10:
            print("情况1")
            fallthrough
            
        case 20:
            print("情况2")
            
        default:
            print("未能匹配")
/*输出结果:
	含有fallthrough:
	情况1
	情况2
*/

3.关于Swich Case的扩展用法

3.1 Case匹配多个值的情况

//Case匹配多个值的情况
    var c = "a"

    print("单项中有多个条件/值的情况")

    switch c {
        case "a","b","c":
            print("情况1")
            
        case "e","f":
            print("情况2")
            
        default:
            print("未能匹配")
    }

3.2判断条件为元组

//Case为元组
 var d = ("hello",10) //定义元组
    
    switch d {
        case ("hello",10):
            print("情况1 ")
            
        case ("hello",20):
            print("情况2")
            
        default:print("未能匹配")
    }
         

3.3判断条件为区间运算符

	var e = 7
	
   	switch e {
        case 1..<6:
                print("情况1 ")
                
        case 6..<10:
                print("情况2")
                
            default:
                print("未能匹配")
        }

3.4元组内拆分

    var value = (10,20)

    switch value {
		//条件1
        case let(name1,name2):
            
            print("name1=\(name1)")
            
            print("name2=\(name2)")
            
        //条件2    这里
        case var(10,name3):
            
            print("name3=\(name3)")
            
        default:
            print("其他情况")
        }
/*输出结果:
name1=10
name2=20 */

3.4额外添加where条件

var value2 = (10,20)

    switch value2 {

        case let(name1,name2) where name1>name2:
            
            print("name1=\(name1)")
            
            print("name2=\(name2)")
            
        case var(10,name3):
            
            print("name3=\(name3)")
            
        default:
            print("其他情况")
        }

本章总结:讲解了switch case的用法和fallthrough,switch可以包含多种条件,可以是多个数值同时在一个case中进行判断;也可以将元组进行拆分之后赋值进行判断,同时还可以在case中添加where条件再一步进行额外的判断。fallthrough贯穿:简单的来说就是继续向下执行一个case


版权声明:本文为Panda_Stars原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。