在swift中defer代码块中的代码 时必须执行的代码 不过也是该方法最后执行的语句
func doPrint() {
print(" 1")
defer {
print("执行")
}
print("2")
}
执行的结果是
1
2
执行。
可以看到打印出"1"以后并不是直接打印出"执行"而是打印"2"最后打印了"执行"
还有就是当有的方法内 有的代码必须执行 但是在执行改代码的时候又不得不进行错误验证如果有错误就必须返回 这种情况的时候就能用到defer代码块
我没有写这样的方法 在网上找了一个里现在贴出来
func writeSomething() {
let file = OpenFile()
let ioStatus = fetchIOStatus()
guard ioStatus != "error" else {
return
}
file.write()
closeFile(file)
}
像这种情况下 如果ioStatus检测到错误 就会跳出方法 但是 文件就永远不会上锁
如果把closeFile(file)放到defer代码块中它就会在执行return的时候执行colseFile方法
func writeSomething() {
let file = OpenFile()
defer {
closeFile(file)
}
let ioStatus = fetchIOStatus()
guard ioStatus != "error" else {
return
}
file.write()
}
不过defer代码块必须要放到return之前不然defer代码块也是不会执行的