Swift defer

2020-08-11 16:12:00 浏览数 (1)

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

0 人点赞