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 的作用与范围。