在swift中defer代碼塊中的代碼 時(shí)必須執(zhí)行的代碼 不過也是該方法最后執(zhí)行的語句
func doPrint() {
print(" 1")
defer {
print("執(zhí)行")
}
print("2")
}
執(zhí)行的結(jié)果是
1
2
執(zhí)行韭寸。
可以看到打印出"1"以后并不是直接打印出"執(zhí)行"而是打印"2"最后打印了"執(zhí)行"
還有就是當(dāng)有的方法內(nèi) 有的代碼必須執(zhí)行 但是在執(zhí)行改代碼的時(shí)候又不得不進(jìn)行錯(cuò)誤驗(yàn)證如果有錯(cuò)誤就必須返回 這種情況的時(shí)候就能用到defer代碼塊
我沒有寫這樣的方法 在網(wǎng)上找了一個(gè)里現(xiàn)在貼出來
func writeSomething() {
let file = OpenFile()
let ioStatus = fetchIOStatus()
guard ioStatus != "error" else {
return
}
file.write()
closeFile(file)
}
像這種情況下 如果ioStatus檢測到錯(cuò)誤 就會(huì)跳出方法 但是 文件就永遠(yuǎn)不會(huì)上鎖
如果把closeFile(file)放到defer代碼塊中它就會(huì)在執(zhí)行return的時(shí)候執(zhí)行colseFile方法
func writeSomething() {
let file = OpenFile()
defer {
closeFile(file)
}
let ioStatus = fetchIOStatus()
guard ioStatus != "error" else {
return
}
file.write()
}
不過defer代碼塊必須要放到return之前不然defer代碼塊也是不會(huì)執(zhí)行的