亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Swift guard 語(yǔ)句

在本文中,您將學(xué)習(xí)使用Guard語(yǔ)句來(lái)控制程序執(zhí)行的流程。

Swift If 語(yǔ)句描述了如何基于特定條件(布爾值)執(zhí)行操作。在本文中,我們將學(xué)習(xí) guard 語(yǔ)句優(yōu)于 if 語(yǔ)句的優(yōu)點(diǎn),以控制程序流,并編寫更簡(jiǎn)單和干凈的代碼。

Swift guard 語(yǔ)句

Guard語(yǔ)句語(yǔ)句的主要用途是在一定條件下將程序控制轉(zhuǎn)移到某個(gè)范圍之外。這些語(yǔ)句與基于特定條件(布爾值)執(zhí)行語(yǔ)句的if語(yǔ)句類似,但與if不同,guard語(yǔ)句只在不滿足某些條件時(shí)運(yùn)行。

此外, guard 語(yǔ)句必須從范圍中退出。因此,我們必須在 guard 語(yǔ)句的末尾使用用戶程序控制語(yǔ)句return、break、continue或throw。

guard 語(yǔ)句的語(yǔ)法

guard expression else {
	//語(yǔ)句
	//必須包含一個(gè)控制語(yǔ)句: return、 break、 continue 或 throw。
}
  • 這里 expression是一個(gè)布爾表達(dá)式(返回true或false)。

  • 如果 expression 值計(jì)算為false,則執(zhí)行代碼塊內(nèi)的 guard 語(yǔ)句。

  • 如果 expression 值計(jì)算為 true,則代碼塊內(nèi)的 guard 語(yǔ)句將從執(zhí)行中跳過。

guard 語(yǔ)句如何工作?

Swift guard 語(yǔ)句如何工作?

注意:guard語(yǔ)句的結(jié)束必須包含一個(gè)控制語(yǔ)句 return,break,continue 或 throw。

示例1:guard 語(yǔ)句如何工作?

一個(gè)簡(jiǎn)單的有效guard 語(yǔ)句如下:

guard true else {
	print("條件不滿足")
}
print("滿足條件")

運(yùn)行該程序時(shí),輸出為:

滿足條件

在上述程序中,guard 包含一個(gè)布爾值true(滿足條件)。由于guard語(yǔ)句僅在不滿足條件時(shí)運(yùn)行,因此不會(huì)執(zhí)行 guard內(nèi)的語(yǔ)句。這就是為什么執(zhí)行 print("滿足條件") 并在屏幕上輸出滿足條件的原因。

現(xiàn)在,將條件更改為 false:

示例2:guard語(yǔ)句必須退出作用域

guard false else {
	print("條件不滿足")
}
print("滿足條件")

在上述程序中,保護(hù)條件的計(jì)算結(jié)果為false。所以,應(yīng)該執(zhí)行else中的print("Condition not met")語(yǔ)句。但是您將收到一個(gè)錯(cuò)誤消息:'guard' body may not fall through, consider using a 'return' or 'throw' to exit the scope.

錯(cuò)誤消息意味著,您需要使用return、break、continue或throw語(yǔ)句從guard語(yǔ)句轉(zhuǎn)移程序控制?,F(xiàn)在我們將使用return。由于return語(yǔ)句只能在函數(shù)內(nèi)部使用,所以我們將把上面的代碼包裝在Swift函數(shù)中。

示例3:函數(shù)內(nèi)部的guard 語(yǔ)句

我們可以在Swift的函數(shù)中使用guard語(yǔ)句,如下所示:

func someFunction() {

	guard false else {
		print("條件不滿足")
		return
	}
	print("滿足條件")
}

someFunction()
print("函數(shù)調(diào)用后輸出 Hello")

當(dāng)您運(yùn)行上述程序時(shí),輸出將是:

條件不滿足
函數(shù)調(diào)用后輸出 Hello

在上述程序中,guard 條件的計(jì)算結(jié)果為 false,因此執(zhí)行g(shù)uard 內(nèi)部的語(yǔ)句。第一條語(yǔ)句print("條件不滿足")在控制臺(tái)中輸出:條件不滿足。

并且語(yǔ)句 return 終止函數(shù)的執(zhí)行,同時(shí) print("Hello, after function call") 函數(shù)調(diào)用執(zhí)行后的語(yǔ)句在控制臺(tái)中輸出:函數(shù)調(diào)用后輸出 Hello。

示例4:帶有可選的guard

我們?cè)?a href="swift-optionals.html" title="Swift可選">Swift Optionals中已經(jīng)看到使用 if-let 來(lái)解開一個(gè) Optional。但是,我們也可以使用guard語(yǔ)句代替if-let來(lái)展開可選語(yǔ)句,這有一個(gè)好處。使用guard而不是if-let展開可選變量的主要優(yōu)點(diǎn)是,我們可以增加解包變量的作用域。

讓我們?cè)谙旅娴氖纠锌吹竭@一點(diǎn):

func changeOptionalStringToUpperCase() {

	var name:String?
	guard let temp = name else {
		print("名稱為nil。 無(wú)法處理")
		return
	}
	print("大寫:\(temp.uppercased())")
}

changeOptionalStringToUpperCase()

當(dāng)您運(yùn)行上述程序時(shí),輸出將是:

名稱為nil。 無(wú)法處理

在上面的程序中,您可以看到未包裝的值temp正在 guard 語(yǔ)句定義的范圍之外使用。由于name被定義為可選且包含 nil 值,因此guard語(yǔ)句無(wú)法解包該值。

因此,在guard else中執(zhí)行的語(yǔ)句打印Name為nil。無(wú)法在輸出中處理,并用 return 語(yǔ)句終止函數(shù)。上述 guard 語(yǔ)句 if else 語(yǔ)句的等效代碼為:

func changeOptionalStringToUpperCase() {
    
	var name:String?
	if let temp = name {
		print("大寫:\(temp.uppercased())")
	} else {
		print("名稱為 nil。無(wú)法處理")
		return
    }
	//如何在這里訪問? 解決方案:使用Guard
}

changeOptionalStringToUpperCase()

注意,上面兩個(gè)語(yǔ)句都是有效的,并且完成相同的工作。但是使用 if-let 語(yǔ)句時(shí),不能在 if-let 語(yǔ)句之外使用 未包裝(unwrapped)值。但是使用守衛(wèi)語(yǔ)句,您可以通過函數(shù)使用 未包裝(unwrapped) 值。

實(shí)例5:有多個(gè)條件的guard

Guard語(yǔ)句還可以鏈接多個(gè)條件,這些條件之間用逗號(hào)(,)分隔,如下所示:

func changeOptionalStringToUpperCase() {
	var name:String? = ""
	guard let temp = name , temp.count > 0  else {
		print("名稱為nil或空字符串。 無(wú)法處理")
		return
	}
	print("Uppercased:\(temp.uppercased())")
}

changeOptionalStringToUpperCase()

當(dāng)您運(yùn)行上述程序時(shí),輸出將是:

名稱為nil或空字符串。 無(wú)法處理

在上面的程序中,guard語(yǔ)句包含兩個(gè)條件,以逗號(hào)分隔。

第一個(gè)條件 let temp = name 解開了一個(gè)可選參數(shù),在我們的實(shí)例中,該條件返回true,第二個(gè)條件 temp.count > 0 檢查解包后的字符串是否包含超過0個(gè)字符,在我們的示例中結(jié)果為false。

因此,guard語(yǔ)句內(nèi)的語(yǔ)句執(zhí)行語(yǔ)句  print("名稱為nil或空字符串。 無(wú)法處理") ,其輸出Name為nil或空字符串。 無(wú)法在控制臺(tái)中處理,并使用return語(yǔ)句終止該函數(shù)。