defer 语句应该在声明它的块之后执行。如果在 try-catch 的 try 块或 do-catch 的 do 块内声明 defer 语句,它是在 catch 块之前还是之后执行?
例如,给定以下 do-catch 块
print("one")
do {
print("two")
defer { print("three")}
// do something that might cause an error
} catch {
print("four")
}
print("five")
如果 do 块抛出错误/异常,则 defer 作用域为 do 块,以便 defer 打印在 catch 打印之前执行,如下所示:
one
two
three
four
five
或者 defer 语句的作用域是整个 do-catch 块,这样 do 块中抛出的错误会导致 defer 语句 print 在 catch 块 print 语句之后执行?
one
two
four
three
five
非常感谢您的帮助
这里有一些可以在 Playground 中运行的代码
enum Err: Error
{
case throwMe
}
print("one")
do {
defer { print("three")}
print("two")
throw Err.throwMe
} catch {
print("four")
}
print("five")
这是输出
one
two
three
four
five
因此我们可以说,延迟语句在错误导致
do
块退出之后执行,但在 catch
块执行之前执行。
如果我没有尝试的话,这就是我的猜测。