Swift中的switch语句跟其他编程语言的switch语句,基本使用上也都一样。
下面是switch语句的基本形式,没用穿透,匹配到哪就到哪结束

var a = 10
switch a {
   case 10:
      print("a = 10")
   case 20:
      print("a = 20")
   default:
      print("其他情况")
}
/*
*编译器打印结果:
a = 10
*/

可以匹配多个值

let str = "d"
switch str {
   case "a","b","c":
      print("匹配a,b,c其中之一")
   case "d","e","f":
      print("匹配d,e,f其中之一")
   default:
   print("其他情况")
}
/*
*编译器打印结果:
匹配d,e,f其中之一
*/

匹配区间,涉及到区间语法,这里简单演示,后面会单独讲解区间语法

var a = 10
switch a {
case 1..<5:
   print("匹配1到4之间的值")
case 6..<11:
   print("匹配6到10之间的值")
default:
print("其他情况")
}
/*
*编译器打印结果:
匹配6到10之间的值
*/

匹配元组,下划线可以匹配所有情况,其实应该是忽略了

var value = ("hello",10,true)
switch value {
   case ("hello",9,true):
      print("匹配情况1")
   case ("world",10,true):
      print("匹配情况2")
   case (_,10,true):
//下划线忽略该值,只匹配是否有其他2个值
      print("匹配情况3")
   default:
      print("其他情况")
}
/*
*编译器打印结果:
匹配情况3
*/

前面元组章节提到过,元组可以将临时赋给变量或常量,switch也可以使用

var value = (10,20)
switch value {
   case let (name1,name2):
      print("name1 = \(name1)")
      print("name2 = \(name2)")
   case var (10,name3):
      print("name3 = \(name3)")
   default:
      print("其他情况")
}
/*
*编译器打印结果:
name1 = 10
name2 = 20
*/

用where来判断额外情况,修改上面的代码,加入where来判断额外情况,name1>name2 条件不成立,所以就继续往下匹配

var value = (10,20)
switch value {
   case let (name1,name2) where name1 > name2:
      print("name1 = \(name1)")
      print("name2 = \(name2)")
   case var (10,name3):
      print("name3 = \(name3)")
   default:
      print("其他情况")
}
/*
*编译器打印结果:
name3 = 20
*/

如果想要贯穿效果,那么使用fallthrough关键字

var value = 10
switch value {
   case 10:
      print("匹配情况1")
      fallthrough
   case 20:
      print("匹配情况2")
   default:
      print("其他情况")
}
/*
*编译器打印结果:
匹配情况1
匹配情况2
*/