Swift switch 語句

在本文中,您將學習使用switch控制語句來控制程序執(zhí)行的流程。

switch語句也是多種Swift控制語句,例如if-else,guard等,它們根據不同的條件執(zhí)行不同的動作。

switch語句的優(yōu)點在于,它可以將值與幾種可能的匹配模式進行比較。 因此,它可以代替長if..else..if梯形圖,同時匹配復雜模式。

switch語句的語法

switch語句的語法為:

switch 變量/表達式 {
case value1:
	// 語句
case value2:
	// 語句
default:
	// 語句
}

Swift中的Switch語句如何工作?

  • switch 表達式只計算一次。

  • 它接受表達式并按順序(上->下)與每個case值進行比較。

  • 如果存在匹配項,則執(zhí)行 case 內的語句,并且第一個匹配的 switch case 一旦完成,整個switch語句就結束執(zhí)行。

  • 如果沒有匹配的case,則落到下一個case語句。

  • 如果都沒有匹配到case,則default關鍵字指定要運行的代碼。

Swift Switch語句流程圖

注意:每個 case 的主體必須至少包含一個可執(zhí)行語句。

示例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匹配來開始。由于dayOfWeekvalue與第一種情況的值不匹配,因此它會降到下一種情況,直到其中一個匹配。

由于case 4與switch表達式匹配,因此case內部的 print("Wednesday") 語句將被執(zhí)行,并且switch case終止。如果沒有case匹配,則執(zhí)行default內部的語句。

示例2:帶 fallthrough 的 Switch 語句

如果在 case 語句中使用 fallthrough 關鍵字,即使 case 值與 switch 表達式不匹配,控制也會繼續(xù)進行下一個 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

在上面的程序中,case 4 執(zhí)行語句 print("Wednesday") ,fallthrough 關鍵字會繼續(xù)執(zhí)行 case 5。case 5中的語句 print("Thursday") 被執(zhí)行,即使 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還沒有發(fā)布")

	case ("Taylor Swift",30) :
		print("我的天啊。 這是泰勒·斯威夫特")

	case (let name, let version):  
		print("""
			編程語言:\(name)
			版本: \(version)
			狀態(tài): Not found
		""")
}

當您運行上述程序時,輸出將是:

編程語言:Go
版本: 10
狀態(tài): Not found

在上面的程序中,我們將元組類型的表達式 programmingLanguage 與以下不同的情況進行匹配:

  • case (let name,let version) where (version < 0 && name.count < 0)
    本示例將 switch 表達式值綁定到臨時常量或變量,以便使用 let 關鍵字在大小寫體中使用。這被稱為值綁定。
    您還可以使用where子句將條件應用于這些值。 對于多個條件,您可以使用&&運算符將它們連接起來,如上例所示。
    如果case不滿足where子句中定義的條件,則這些case塊中的語句將不執(zhí)行,并且無法通過比較下一個switch case。

  • case ("Swift" , ..<4 )
    這種情況下,將元組的第一個元素與字符串字面量"Swift"匹配,還會檢查第二個元素是否在單邊范圍內..<4。

  • case ("Swift" ,4...)
    這種情況下,將元組的第一個元素與字符串字面量"Swift"匹配,還會檢查第二個元素是否在單邊范圍內4…。

  • case (let name, let version)
    這種情況將元組的每個值綁定到臨時常量或變量。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清