defer
用于在程序離開當前作用域之前,執(zhí)行一段代碼。
public func method() -> Void {
print(1)
defer {
print(2)
}
print(3)
}
輸出:
1
3
2
上訴在一個作用域內(nèi)只有存在一個 defer 代碼塊
思考:
相同作用域內(nèi)存在多個 defer 聲明,代碼的執(zhí)行順序又是如何 ?
public func method() -> Void {
print(1)
defer {
print(2)
}
print(3)
defer {
print(4)
}
print(5)
}
輸出
1
3
5
4
2
與 defer 聲明順序倒序執(zhí)行
相同作用域內(nèi)存在多個 defer 聲明且在 defer 中嵌套 defer 是如何執(zhí)行,代碼的執(zhí)行順序又是如何 ?
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 內(nèi)嵌套 defer 也同上訴作用域結束后執(zhí)行,作用域對應是 defer 的作用與范圍。