switch语句也是各种Swift控制语句egif-else,guard等,它们根据不同的条件执行不同的操作。
switch语句的优点在于,它可以将值与几种可能的匹配模式进行比较。因此,它可以替代长if..else..if
梯形图,同时匹配复杂模式。
switch语句的语法
switch语句的语法为:
switch variable/expression {
case value1:
// statements
case value2:
// statements
default:
// statements
}
Swift中的Switch语句如何工作?
- 开关表达式只计算一次。
- 它接受表达式并按顺序(上->下)与每个个案值进行比较。
- 如果存在匹配项,则在第一个匹配的切换用例完成后,将执行案例内的语句,并且整个switch语句将完成其执行。
- 如果没有匹配的情况,则落到下一个情况。
- 如果没有大小写匹配,则default关键字指定要运行的代码。
注意 :每种情况的主体必须至少包含一个可执行语句。
示例1:使用Switch语句的简单程序
let dayOfWeek = 4
switch dayOfWeek {
case 1:
print("Sunday")
case 2:
print("Monday")
case 3:
print("Tuesday")
case 4:
print("Wednesday")
case 5:
print("Thursday")
case 6:
print("Friday")
case 7:
print("Saturday")
default:
print("Invalid day")
}
当您运行上述程序时,输出将是:
Wednesday
在上面的程序中,switch语句首先将dayOfWeek值与case 1匹配。由于dayOfWeek值与第一个案例值1不匹配,因此它将降到下一个案例,直到一个匹配。
由于案例4与switch表达式匹配,因此该案例内部的语句print("Wednesday")
执行,并且switch case终止。如果没有大小写匹配,则执行default内部的语句。
示例2:具有穿透的switch语句
如果在case语句中使用fallthrough
关键字,则即使case值与switch表达式不匹配,控件也会继续进行下一个case。
let dayOfWeek = 4
switch dayOfWeek {
case 1 :
print("Sunday")
case 2:
print("Monday")
case 3:
print("Tuesday")
case 4:
print("Wednesday")
fallthrough
case 5:
print("Thursday")
case 6:
print("Friday")
case 7:
print("Saturday")
default:
print("Invalid day")
}
当您运行上述程序时,输出将是:
Wednesday
Thursday
在上述程序中, 壳体4个执行该语句print("Wednesday")
和fallthrough
关键字进行到case5。即使案例与switch表达式不匹配, 案例5中的语句print("Thursday")
也会执行。因此,您可以在控制台中看到星期四的输出。
示例3:具有更复杂模式的switch语句
let programmingLanguage = (name: "Go", version: 10)
switch programmingLanguage {
case (let name,let version) where (version < 0 && name.count < 0) :
print("Invalid input")
case ("Swift",let version) where version == 4:
print("Found latest version of Swift")
case ("Swift" , ..<4 ):
print("Found older version of swift)")
case ("Swift" ,4...) :
print("Swift version greater than 4 is not released yet")
case ("Taylor Swift",30) :
print("OMG. This is Taylor swift")
case (let name, let version):
print("""
Programming Language:\(name)
Version: \(version)
Status: Not found
""")
}
当您运行上述程序时,输出将是:
Programming Language:Go
Version: 10
Status: Not found
在上面的程序中,我们匹配具有不同情况的元组类型的表达式编程语言 ,如下所示:
case (let name,let version) where (version < 0 && name.count < 0)
这种情况将switch表达式的值绑定到临时常量或变量,以便在案例主体中使用
let
关键字。这称为值绑定。您还可以使用
where
子句将条件应用于这些值。对于多个条件,您可以使用&&
运算符将它们连接起来,如上例所示。如果case不满足where子句中定义的条件,则这些case块中的语句将不执行,并且无法通过比较下一个switch case。
case ("Swift" , ..<4 )
这种情况下,将元组的第一个元素与字符串 字面量
"Swift"
相匹配,并检查第二个元素是否位于单边范围内..<4
。case ("Swift" ,4...)
这种情况下,将元组的第一个元素与字符串 字面量
"Swift"
相匹配,并检查第二个元素是否位于单边范围4…
。case (let name, let version)
这种情况将元组的每个值绑定到临时常量或变量。