swift switch条件分支语句 – Swift最新教程

上一章Swift教程请查看:swift if,if…else语句

在本文中,你将学习如何使用switch控制语句来控制程序的执行流。

switch语句也是Swift控制语句的一种,例如if-else、guard等,根据不同的条件执行不同的动作。

switch语句的优点在于,它可以将一个值与几个可能的匹配模式进行比较,因此,它可以代替if..else..if同时匹配复杂的模式。

switch语句的语法

switch语句的语法为:

switch variable/expression {
    case value1:
        // statements
    case value2:
        // statements
    default:
        // statements
    }

Swift中的Switch语句是如何工作的?

  • switch表达式求值一次。
  • 它接受表达式并按顺序(Top -> Bottom)与每个大小写值进行比较。
  • 如果存在匹配,则执行案例中的语句,并且一旦完成第一个匹配的switch案例,整个switch语句就完成执行。
  • 如果没有匹配的情况,它下降到下一个情况。
  • default关键字指定在没有大小写匹配的情况下运行的代码。
Swift switch切换语句流程图

注意:每个案例的主体必须包含至少一个可执行语句。

例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")
}

在上面的程序中,switch语句首先将dayOfWeek值与case 1匹配,由于dayOfWeek值与第一个case值1不匹配,所以在匹配之前,它将一直保留到下一个case。

由于case 4与switch表达式匹配,case中的statementprint(“Wednesday”)执行,switch case终止。如果没有匹配大小写,则执行default中的语句。

示例2:使用fallthrough切换语句

如果在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")
}

在上面的程序中,case
4执行语句print(“Wednesday”),fallthrough关键字执行case5。即使case与switch表达式不匹配,case 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("无效的输入")
    case ("Swift",let version) where version == 4:
        print("发现最新版本的Swift")
    case ("Swift" , ..<4 ):
        print("发现了旧版本的swift)")
    case ("Swift" ,4...) :
        print("大于4的Swift版本还没有发布")
    case ("Taylor Swift",30) :
        print("OMG. This is Taylor swift")
    case (let name, let version):  
        print("""
            编程语言:\(name)
            Version: \(version)
            Status: Not found
        """)
}

在上面的程序中,我们将tupletype的表达式编程语言与以下不同的case进行匹配:

  • case (let name,let version),其中(version < 0 && name.count<
    0)

这种情况将switch表达式值绑定到临时常量或变量,以便在let关键字的情况中使用,这称为值绑定。

你还可以使用where子句将条件应用于这些值,对于多个where条件,可以使用&&操作符将它们连接起来,如上面示例所示。

如果case不满足where子句中定义的条件,那么case块中的语句将不执行,并通过比较下一个switch case。

  • case(“Swift”,..< 4)

本例将tuple第一个元素与字符串文字“Swift”匹配,并检查第二个元素是否位于单侧的范围..<4。

  • case(“迅速”,4……)

本例将tuple第一个元素与字符串文字“Swift”匹配,并检查第二个元素是否位于单侧的range4中……

  • case (let name, let version)

这种情况将元组的每个值绑定到临时常量或变量。

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?