- Swift 5從零到精通iOS開發訓練營
- 張益琿編著
- 1398字
- 2022-07-27 18:32:11
4.5 Swift語言中的流程跳轉語句
跳轉語句可以提前中斷循環結構,也可以人為控制選擇結構的跳轉,使代碼的執行更加靈活多變。Swift中提供了大量的流程跳轉語句供開發者使用,熟悉這些語句的結構與特點可以使開發效率大大提高。Swift中提供的流程跳轉語句主要有continue、break、fallthrough、return、throw、guard。
continue語句用于循環結構中,其作用是跳過本次循環,直接開始下次循環。這里需要注意,continue的作用并不是跳出循環結構,而是跳過本次循環,直接執行下一個循環周期,示例如下:

上面的示例代碼將跳過index等于6時的代碼塊,在打印信息中會缺少index等于6時的打印輸出。需要注意的是,continue語句默認的操作范圍直接包含它的這一層循環結構,如果代碼中嵌套了多層循環結構,continue語句會跳過本次循環。那么,如果想要實現不跳過本次循環,而是直接跳至開發者指定的那一層循環結構,該如何寫呢?示例如下:

以上代碼創建了兩層循環結構,在內層循環中使用了continue語句進行跳轉,MyLabel是外層循環的標簽,因此這里的continue跳轉將會跳出indexI等于1時的外層循環,直接開始indexI等于2的循環操作。
break語句是中斷語句,其也可以用于循環結構中,和continue語句不同的是,break語句會直接中斷直接包含它的循環結構,即當循環結構為一層時,如果循環并沒有執行完成,則后面所有的循環都將被跳過。如果有多層循環結構,程序會直接中斷直接包含它的循環結構,繼續執行該循環結構外層的循環結構,示例如下:

上面的代碼在index等于6時使用了break語句進行中斷,第5次循環后的所有打印信息都將被跳過。break語句默認將中斷直接包含它的循環結構,同樣也可以使用指定標簽的方式來中斷指定的循環結構,示例如下:

break語句也可以用于switch結構中。在switch結構中,break語句將直接中斷后面所有的匹配過程,直接跳出switch結構。在Swift語言中,switch-case選擇匹配結構默認就是break操作,故開發者不必手動添加break代碼。
fallthrough語句是Swift中特有的一種流程控制語句,前面提到過,當Swift語言中的switch-case結構匹配到一個case后,會自動中斷后面所有case的匹配操作,如果在實際開發中需要switch-case結構不自動進行中斷操作,可以使用fallthrough語句,示例如下:

以上示例代碼將會打印Sure、Sim和SIM。
return語句對于讀者來說應該十分熟悉,其在函數中用于返回結果值,也可以用于提前結束無返回值類型的函數。當然,return語句的應用場景不只局限于函數中,在閉包中也可以使用return進行返回。函數的相關知識會在后面的章節詳細介紹,這里只做簡單演示,示例如下:

throw語句用于異常的拋出,throw語句拋出的異常如果不進行捕獲處理,也會使程序中斷。Swift語言中有拋出異常和處理異常的代碼結構,在后面的章節中會詳細介紹,這里只做簡單演示。在函數中拋出異常的示例代碼如下:

guard-else結構語句是Swift 2.0之后新加入的一種語法結構,Swift團隊創造它的目的在于使代碼的結構和邏輯更加清晰。在實際開發中,尤其是在函數的編寫中,經常會遇到這樣的場景:當參數符合某個條件時,函數才能正常執行,否則直接通過return來終止函數的執行,如果不使用guard-else結構,示例代碼如下:

上面的代碼結構在邏輯上并不那么優美,開發者的原意是當param參數大于0時才執行函數中的操作,在2.0之前卻使用了相反的邏輯來中斷函數,當然,開發者也可以將函數實現如下:

經過修改后,代碼邏輯清晰了許多,然而還是有一些問題,如果這個函數中需要做的操作很多,那么所有條件判斷的代碼都將寫在if語句塊中,代碼結構就顯得雜亂無章,guard-else語句就是為了優化這種情況而產生的。guard-else語句也被稱為守護語句,顧名思義,其作用就是確保某個條件成立才允許其后的代碼執行,示例如下:

- OpenStack Cloud Computing Cookbook(Third Edition)
- Puppet 4 Essentials(Second Edition)
- .NET之美:.NET關鍵技術深入解析
- 數據庫程序員面試筆試真題與解析
- Kubernetes實戰
- Microsoft Application Virtualization Cookbook
- Power Up Your PowToon Studio Project
- Learning Linux Binary Analysis
- GeoServer Beginner's Guide(Second Edition)
- HTML5從入門到精通(第4版)
- Python算法詳解
- 現代C++編程實戰:132個核心技巧示例(原書第2版)
- Test-Driven JavaScript Development
- Natural Language Processing with Python Quick Start Guide
- Instant GLEW