swift-defer-picularity:为什么case:defer中的代码在开关作用域结束之前被调用?
在我们跌入酒吧场景之前到达baz()。 这是意料之中的事,还是编译器博克? 我希望baz()在开关结束时被调用swift-defer-picularity:为什么case:defer中的代码在开关作用域结束之前被调用?,swift,Swift,在我们跌入酒吧场景之前到达baz()。 这是意料之中的事,还是编译器博克? 我希望baz()在开关结束时被调用 范围还是功能范围 案例的结尾:块是该块作用域的结尾。。。fallthrough语句不维护范围 考虑以下几点: case .foo: defer { baz() } fallthrough case .bar: 输出将是: 一, 推迟 二, 外部延迟 现在,考虑一下: defer { print("outer deferred&q
范围还是功能范围 案例的结尾:块是该块作用域的结尾。。。
fallthrough
语句不维护范围
考虑以下几点:
case .foo:
defer {
baz()
}
fallthrough
case .bar:
输出将是:
一,
推迟
二,
外部延迟
现在,考虑一下:
defer { print("outer deferred") }
let t = 1
switch t {
case 0:
print("0")
case 1:
print("1")
defer { print("deferred") }
fallthrough
case 2:
print("2")
default:
print("default")
}
延迟{打印(“外部延迟”)}
设t=1
开关t{
案例0:
打印(“0”)
案例1:
让str=“你好”
打印(“1”)
延迟{打印(“延迟”)}
失败
案例2:
打印(“2”)
打印(str)//
defer { print("outer deferred") }
let t = 1
switch t {
case 0:
print("0")
case 1:
let str = "hello"
print("1")
defer { print("deferred") }
fallthrough
case 2:
print("2")
print(str) // <-- error
default:
print("default")
}