SwiftUI guard 是什么如何用(2020教程)
guard 是一種控制流語句
通俗講guard和if-else、switch同屬于控制流范疇語句,if-esle和switch都屬于上古語句歷史悠久,guard肯定是后來者。
后來者的出現肯定是要解決一些前人無法解決的問題。記得有位大神說過“當你開始寫switch時,你代碼就開始墮落了”,可見switch語句時多么不受高手們的喜愛。
guard是swift 2.0引入的,他有兩個強大的理念optional unwrapping 和 where clauses 。optional unwrapping 讓我們避免金字塔式冗長的if語句。where clauses 附加了簡單而強大的where表達式,讓我們可以非常方便審視正在驗證的結果。
什么時候使用guard
例如,我們有多個文本庫用于收集用戶的基本信息。為了保證輸入不為空,我們需要逐個對文本框進行開包檢查。
傳統if-else方式,很容易造成金字塔的代碼臃腫,相比大家平時沒少寫這類代碼。具體代碼如下:
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)
}
執行順序
簡單demo
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")
輸出結果
Condition not met
Hello after function call
guard whith optional
func changeOptionalStringToUpperCase() {
var name:String?
guard let temp = name else {
print("Name is nil. Cannot process")
return
}
print("Uppercased:\(temp.uppercased())")
}
changeOptionalStringToUpperCase()
輸出結果
Name is nil. Cannot process
Guard with multiple conditions
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 中有幾種類型的控制流語句,包括循環語句、分支語句和控制傳輸語句。循環語句允許重復執行代碼塊,分支語句允許僅在滿足某些條件時執行特定代碼塊,并且控制傳輸語句提供了一種更改代碼執行順序的方法。此外,Swift 還提供了一個 do 語句來引入作用域,并捕獲和處理錯誤,并提供一個延遲語句,用于在當前作用域退出之前運行清理操作。
分支語句
分支語句允許程序根據一個或多個條件的值執行代碼的某些部分。分支語句中指定的條件的值控制程序如何分支,因此,執行什么代碼塊。Swift 有三個分支語句:if 語句、guard語句和switch語句。
guard 語句
如果未滿足一個或多個條件,則使用保護語句將程序控制轉移到作用域外。
guard condition else {
statements
}
- 在guard語句中任何條件的值必須是 Bool 類型或橋接到 Bool 的類型。該條件也可以是optional binding declaration.
- 從 guard 語句條件中的可選綁定聲明分配值的任何常量或變量都可用于 guard 語句的封閉作用域的其余部分。
- guard 語句的else是必需的,并且必須使用以下語句之一調用"Nerver"類型的函數或將程序控制權轉移到保護語句的封閉范圍之外:
- return
- break
- continue
- throw
智能推薦
SwiftUI List 如何顯示dictionary
本文價值與收獲 看完本文后,您將能夠作出下面的界面 看完本文您將掌握的技能 list基礎使用 顯示dictionary 代碼 技術交流 QQ:3365059189 SwiftUI技術交流QQ群:518696470...
SwiftUI之Codable是什么(含解析JSON源碼)
什么Codable Codable是一種將JSON數據(或字典)綁定到Swift中的模型/類/對象的方法。 Codable首先在Swift 4中可用,它省去了手動綁定和保護JSON響應的工作。 實戰代碼 [email protected] Codable協議使解碼平面數據變得很簡單:如果您解碼的是一個類型的單個實例,或者這些實例的數組或字典,那么一切就正常了。下面我們將解碼稍微...
SwiftUI之List 和form(2020版)
SwiftUI之List 和form(2020版) VStack 效果 image.png List 效果 image.png List with header & footer 效果 image.png List & navigation Treat.swift 效果 image.png 完成代碼 效果 image.png...
SwiftUI-WWDC2020-實例展示
整體效果 總體效果 代碼實現 目錄結構 sandwichApp.swift 程序入口文件,store作為全局變量聲明在此文件,并作為參數傳入ContentView ContentView.swift 主頁面,所有功能和業務邏輯都在此頁面,是一個App的列表頁面,可以新增,移動,刪除,編輯,點擊單元格可進入詳情頁面。單元格抽象為SandwichCell。 SandwichDetail.swift 詳...
SwiftUI ListItemTint 基礎教程(含源碼)
ListItemTint 應用于列表中內容的色調效果的配置。 實戰代碼 技術交流 QQ:3365059189 SwiftUI技術交流QQ群:518696470...
猜你喜歡
SwiftUI UITabBarController 基礎教程含代碼
UITabBarController 一個容器視圖控制器,管理radio-style的選擇界面,其中的選擇確定要顯示的子視圖控制器。 使用教程 標簽欄界面在窗口底部顯示標簽,用于在不同模式之間進行選擇并顯示該模式的視圖。此類通常按原樣使用,但也可以子類化。 標簽欄控制器界面的每個標簽都與一個自定義視圖控制器關聯。當用戶選擇特定的選項卡時,選項卡欄控制器將顯示相應視圖控制器的根視圖,以替換任何先前的...
SwiftUI 封裝UITabBarController 教程含源碼
本文價值與收獲 看完本文后,您將能夠作出下面的界面 基礎知識 UITabBarController是什么 一個容器視圖控制器,管理radio-style的選擇界面,其中的選擇確定要顯示的子視圖控制器。 使用教程 標簽欄界面在窗口底部顯示標簽,用于在不同模式之間進行選擇并顯示該模式的視圖。此類通常按原樣使用,但也可以子類化。 代碼 1、封裝方案一 代碼截圖...
Lottie動畫+SwiftUI教程(CocoaPods & SPM)
目錄 前言 0 準備工作 1 Xcode新建SwiftUI項目 2 通過CocoaPods安裝Lottie(二選一) 2 通過SPM安裝Lottie(二選一) 第一步:File→Swift Packages→Add 第二步:添加第三方庫的鏈接 第三步:設置項目的Dead Code Stripping 3 添加一個JSON格式的Lottie動畫 4 添加文件LottieView....
SwiftUI 新屬性MenuPickerStyle 教程含源碼
實戰需求 SwiftUI 新屬性MenuPickerStyle,允許Picker在菜單中顯示其選項。這種風格將在主頁面進行遮蓋處理。本文將演示一下MenuPickerStyle的基礎使用 本文價值與收獲 看完本文后,您將能夠作出下面的界面 看完本文您將掌握的技能 掌握Picker基礎使用 掌握MenuPickerStyle基礎使用 實現菜單彈出效果 基礎知識 MenuPickerStyle 一種選...