最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift中defer關鍵字推遲執(zhí)行示例詳解

 更新時間:2018年03月06日 08:32:03   作者:Rinpe  
這篇文章主要給大家介紹了關于Swift中defer關鍵字推遲執(zhí)行的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。

前言

大家應該都知道,在一些語言中,有try/finally這樣的控制語句,比如Java。

這種語句可以讓我們在finally代碼塊中執(zhí)行必須要執(zhí)行的代碼,不管之前怎樣的興風作浪。

在Swift 2.0中,Apple提供了defer關鍵字,讓我們可以實現(xiàn)同樣的效果。

func checkSomething() {
 print("CheckPoint 1")
 doSomething()
 print("CheckPoint 4")
}
 
func doSomething() {
 print("CheckPoint 2")
 defer {
 print("Clean up here")
 }
 print("CheckPoint 3")
} 
checkSomething() // CheckPoint 1, CheckPoint 2, CheckPoint 3, Clean up here, CheckPoint 4

上述示例可以看到,在打印出“CheckPoint 2”之后并沒有打印出“Clean up here”,而是“CheckPoint 3”,這就是defer的作用,它對進行了print("Clean up here")延遲。

我們再來看一個I/O的示例:

// 偽代碼
func writeSomething() {
 let file = OpenFile()
 let ioStatus = fetchIOStatus()
 guard ioStatus != "error" else {
  return
 }
 file.write()
 closeFile(file) 
}

上述示例是一個I/O操作的偽代碼,如果獲取到的ioStatus正常,那么該方法沒有問題,

如果ioStatus取到的是error,那么會被guard語句抓到執(zhí)行return操作,

這樣的話closeFile(file)就永遠都不會執(zhí)行了,一個嚴重的Bug就這樣產(chǎn)生了。

下面我們看看如何用defer來解決這個問題:

// 偽代碼
func writeSomething() {
 let file = OpenFile()
 defer {
  closeFile(file)
 }
 let ioStatus = fetchIOStatus()
 guard ioStatus != "error" else {
  return
 }
 file.write()
}

我們將closeFile(file)放在defer代碼塊里,這樣即使ioStatus為error,在執(zhí)行return前會先執(zhí)行defer里的代碼,這樣就保證了不管發(fā)生什么,最后都會將文件關閉。

需要注意的是, 雖然說defer的內容會在return之前執(zhí)行, 但是如果defer定義在return之后, 那么還是不會執(zhí)行defter的內容, 也就是說, defer關鍵字必須比return早出現(xiàn)。

放在return之后:

var str = "Hello, playground"
func show() {
 print("這里是即將要推遲(但一定會)執(zhí)行的代碼")
}
func test() {
 if str.characters.count >= 2 {
  print("跳出該方法的執(zhí)行")
  return
 }
 defer {
  show()
 }
}
test() // 輸出結果: 跳出該方法的執(zhí)行

放在return之前:

var str = "Hello, playground"
func show() {
 print("這里是即將要推遲(但一定會)執(zhí)行的代碼")
}
func test() {
 defer {
  show()
 }
 if str.characters.count >= 2 {
  print("跳出該方法的執(zhí)行")
  return
 }
}
test() // 輸出結果: 跳出該方法的執(zhí)行 這里是即將要推遲(但一定會)執(zhí)行的代碼

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • Swift教程之枚舉類型詳解

    Swift教程之枚舉類型詳解

    這篇文章主要介紹了Swift教程之枚舉類型詳解,本文講解了枚舉語法、匹配枚舉值與switch語句、關聯(lián)值、原始值等內容,需要的朋友可以參考下
    2015-01-01
  • Swift中圖片資源使用流程的優(yōu)化方法詳解

    Swift中圖片資源使用流程的優(yōu)化方法詳解

    這篇文章主要給大家介紹了關于Swift中圖片資源使用流程的優(yōu)化方法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-01-01
  • swift 3.0中實現(xiàn)字符串截取、比較的方法示例

    swift 3.0中實現(xiàn)字符串截取、比較的方法示例

    時,為了使用現(xiàn)有的字符串生成一個新的字符串,我們可以使用截取字符串的方法實現(xiàn)。下面這篇文章主要給大家介紹了關于swift 3.0中實現(xiàn)字符串截取的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒。
    2017-10-10
  • 簡單理解插入排序算法及Swift版的代碼示例

    簡單理解插入排序算法及Swift版的代碼示例

    插入排序算法可以在已排序的序列中將要插入的元素和原有元素保持有序,這里我們來簡單理解插入排序算法及Swift版的代碼示例,需要的朋友可以參考下
    2016-07-07
  • Swift實現(xiàn)表格視圖單元格多選

    Swift實現(xiàn)表格視圖單元格多選

    這篇文章主要為大家詳細介紹了Swift實現(xiàn)表格視圖單元格多選,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 通過示例分析Swift單例模式

    通過示例分析Swift單例模式

    這篇文章主要介紹了通過示例分析Swift單例模式的三種方法,分別是全局變量,內部變量,dispatch_once方式,有需要的小伙伴可以參考下。
    2015-06-06
  • Swift算法實現(xiàn)字符串轉數(shù)字的方法示例

    Swift算法實現(xiàn)字符串轉數(shù)字的方法示例

    最近學完了swift想著實踐下,就通過一些簡單的算法進行學習研究,下面這篇文章主要介紹了Swift算法實現(xiàn)字符串轉數(shù)字的方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-03-03
  • 利用swift實現(xiàn)卡片橫向滑動動畫效果的方法示例

    利用swift實現(xiàn)卡片橫向滑動動畫效果的方法示例

    卡片橫向滑動動畫效果相信對大家來說都不陌生,下面這篇文章主要給大家介紹了關于利用swift實現(xiàn)卡片橫向滑動動畫效果的方法示例,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • 使用swift實現(xiàn)計算器功能

    使用swift實現(xiàn)計算器功能

    這篇文章主要為大家詳細介紹了使用swift實現(xiàn)計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • swift中獲取字符串前綴的七種方法總結

    swift中獲取字符串前綴的七種方法總結

    在日常的開發(fā)中,經(jīng)常會需要獲取一個字符串的前綴,在這篇文章中我總結了在 Swift 中檢查字符串前綴的多種方法分享給大家,看看有沒有你不知道的
    2023-12-12

最新評論

通化县| 新余市| 高陵县| 金寨县| 平山县| 华安县| 乡城县| 定州市| 上栗县| 蓬安县| 津南区| 竹溪县| 卢龙县| 奈曼旗| 抚松县| 浦江县| 宁化县| 滨州市| 察雅县| 错那县| 万州区| 景宁| 满洲里市| 玉山县| 阳江市| 石嘴山市| 岳普湖县| 新田县| 那曲县| 攀枝花市| 天全县| 宜黄县| 辽宁省| 呼图壁县| 丰都县| 金山区| 拜城县| 湘阴县| 东乡县| 祥云县| 赣榆县|