阅读 125

Swift switch 语句

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

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

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

switch语句的语法

switch语句的语法为:

switch 变量/表达式 {case value1:	// 语句case value2:	// 语句default:	// 语句}

Swift中的Switch语句如何工作?

  • switch 表达式只计算一次。

  • 它接受表达式并按顺序(上->下)与每个case值进行比较。

  • 如果存在匹配项,则执行 case 内的语句,并且第一个匹配的 switch case 一旦完成,整个switch语句就结束执行。

  • 如果没有匹配的case,则落到下一个case语句。

  • 如果都没有匹配到case,则default关键字指定要运行的代码。

Swift Switch语句流程图

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

示例1:使用Switch语句的简单程序

示例

let dayOfWeek = 4switch 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匹配来开始。由于dayOfWeekvalue与第一种情况的值不匹配,因此它会降到下一种情况,直到其中一个匹配。

由于case 4与switch表达式匹配,因此case内部的 print("Wednesday") 语句将被执行,并且switch case终止。如果没有case匹配,则执行default内部的语句。

示例2:带 fallthrough 的 Switch 语句

如果在 case 语句中使用 fallthrough 关键字,即使 case 值与 switch 表达式不匹配,控制也会继续进行下一个 case。

示例

let dayOfWeek = 4switch 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")
}

当您运行上述程序时,输出将是:

WednesdayThursday

在上面的程序中,case 4 执行语句 print("Wednesday") ,fallthrough 关键字会继续执行 case 5。case 5中的语句 print("Thursday") 被执行,即使 cas 与 switch 表达式不匹配。因此,您可以在控制台中还看到输出 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("Swift版本大于4还没有发布")	case ("Taylor Swift",30) :		print("我的天啊。 这是泰勒·斯威夫特")	case (let name, let version):  		print("""
			编程语言:\(name)
			版本: \(version)
			状态: Not found
		""")
}

当您运行上述程序时,输出将是:

编程语言:Go版本: 10状态: Not found

在上面的程序中,我们将元组类型的表达式 programmingLanguage 与以下不同的情况进行匹配:

  • 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)


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐