Swift 关键字 -- defer

defer

用于在程序离开当前作用域之前,执行一段代码。

public func method() -> Void {
    print(1)
    defer {
        print(2)
    }
    print(3)
}

输出:

1
3
2

上诉在一个作用域内只有存在一个 defer 代码块

思考:

相同作用域内存在多个 defer 声明,代码的执行顺序又是如何 ?

public func method() -> Void {
    print(1)
    defer {
        print(2)
    }
    print(3)
    defer {
        print(4)
    }
    print(5)
}
输出
1
3
5
4
2

与 defer 声明顺序倒序执行

相同作用域内存在多个 defer 声明且在 defer 中嵌套 defer 是如何执行,代码的执行顺序又是如何 ?

public func deferMethod() -> Void {
    print(1)
    defer {
        print(2)
    }
    print(3)
    defer {
        print(4)
        defer {
            print(5)
        }
        print(6)
    }
    print(7)
}
输出
1
3
7
4
6
5
2

defer 内嵌套 defer 也同上诉作用域结束后执行,作用域对应是 defer 的作用与范围。

你可能感兴趣的:(Swift 关键字 -- defer)