欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

Swift

當前位置:主頁 > 軟件編程 > Swift >

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

來源:本站原創(chuàng)|時間:2020-01-11|欄目:Swift|點擊: 次

前言

大家應該都知道,在一些語言中,有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的內(nèi)容會在return之前執(zhí)行, 但是如果defer定義在return之后, 那么還是不會執(zhí)行defter的內(nèi)容, 也就是說, 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í)行的代碼

總結

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

上一篇:Swift中初始化init的方法小結

欄    目:Swift

下一篇:Swift利用Decodable解析JSON的一個小問題詳解

本文標題:Swift中defer關鍵字推遲執(zhí)行示例詳解

本文地址:http://mengdiqiu.com.cn/a1/Swift/11965.html

網(wǎng)頁制作CMS教程網(wǎng)絡編程軟件編程腳本語言數(shù)據(jù)庫服務器

如果侵犯了您的權利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權所有