通俗講guard和if-else、switch同屬於控制流範疇語句,if-esle和switch都屬於上古語句歷史悠久,guard確定是後來者。swift
後來者的出現確定是要解決一些前人沒法解決的問題。記得有位大神說過「當你開始寫switch時,你代碼就開始墮落了」,可見switch語句時多麼不受高手們的喜好。 guard是swift 2.0引入的,他有兩個強大的理念optional unwrapping 和 where clauses 。optional unwrapping 讓咱們避免金字塔式冗長的if語句。where clauses 附加了簡單而強大的where表達式,讓咱們能夠很是方便審視正在驗證的結果。bash
例如,咱們有多個文本庫用於收集用戶的基本信息。爲了保證輸入不爲空,咱們須要逐個對文本框進行開包檢查。 傳統if-else方式,很容易形成金字塔的代碼臃腫,相比你們平時沒少寫這類代碼。具體代碼以下:app
func nonguardSubmit() {
if let name = nameField.text {
if let address = addressField.text {
if let phone = phoneField.text {
sendToServer(name, address: address, phone: phone)
} else {
show("no phone to submit")
}
} else {
show("no address to submit")
}
} else {
show("no name to submit")
}
}
複製代碼
爲了解決這個問題,咱們可使用guard語句函數
func submit() {
guard let name = nameField.text else {
show("No name to submit")
return
}
guard let address = addressField.text else {
show("No address to submit")
return
}
guard let phone = phoneField.text else {
show("No phone to submit")
return
}
sendToServer(name, address: address, phone: phone)
}
複製代碼
guard true else {
print("Condition not met")
}
print("Condition met")
複製代碼
func someFunction() {
guard false else {
print("Condition not met")
return
}
print("Condition met")
}
someFunction()
print("Hello after function call")
複製代碼
輸出結果ui
Condition not met
Hello after function call
複製代碼
guard whith optionalspa
func changeOptionalStringToUpperCase() {
var name:String?
guard let temp = name else {
print("Name is nil. Cannot process")
return
}
print("Uppercased:\(temp.uppercased())")
}
changeOptionalStringToUpperCase()
複製代碼
輸出結果code
Name is nil. Cannot process
複製代碼
Guard with multiple conditionscdn
func changeOptionalStringToUpperCase() {
var name:String? = ""
guard let temp = name , temp.count > 0 else {
print("Name is nil or an empty string. Cannot process")
return
}
print("Uppercased:\(temp.uppercased())")
}
changeOptionalStringToUpperCase()
複製代碼
在 Swift 中,有三種類型的語句:簡單語句、編譯器控制語句和控制流語句。簡單語句是最多見的語句,由表達式或聲明組成。編譯器控件語句容許程序更改編譯器行爲的各個方面,幷包括條件編譯塊和行控制語句。
控制流語句用於控制程序中的執行流。Swift 中有幾種類型的控制流語句,包括循環語句、分支語句和控制傳輸語句。循環語句容許重複執行代碼塊,分支語句容許僅在知足某些條件時執行特定代碼塊,而且控制傳輸語句提供了一種更改代碼執行順序的方法。此外,Swift 還提供了一個 do 語句來引入做用域,並捕獲和處理錯誤,並提供一個延遲語句,用於在當前做用域退出以前運行清理操做。
分支語句 分支語句容許程序根據一個或多個條件的值執行代碼的某些部分。分支語句中指定的條件的值控制程序如何分支,所以,執行什麼代碼塊。Swift 有三個分支語句:if 語句、guard語句和switch語句。
若是未知足一個或多個條件,則使用保護語句將程序控制轉移到做用域外。
guard condition else {
statements
}
複製代碼