defer 里的代码会在函数 return 之前执行,无论函数是从哪个分支 return的,包括有try catch的情况。通俗点讲就是defer会在当前作用域结束前调用。
defer 使用场景 执行完查询后关闭数据库连接
代码语言:javascript复制func someQuery() -> ([Result], [Result]){
let db = DBOpen("xxx")
defer {
db.close()
}
guard results1 = db.query("query1") else {
return nil
}
guard results2 = db.query("query2") else {
return nil
}
return (results1, results2)
}
需要注意的是, 如果有多个 defer, 那么后加入的先执行
代码语言:javascript复制func someDeferFunction() {
defer {
print("(#function)-end-1-1")
print("(#function)-end-1-2")
}
defer {
print("(#function)-end-2-1")
print("(#function)-end-2-2")
}
if true {
defer {
print("if defer")
}
print("if end")
}
print("function end")
}
someDeferFunction()
// 输出
// if end
// if defer
// function end
// someDeferFunction()-end-2-1
// someDeferFunction()-end-2-2
// someDeferFunction()-end-1-1
// someDeferFunction()-end-1-2