gpt4 book ai didi

swift 延迟特殊性 : why is code in case:defer is invoked before the end of the switch scope?

转载 作者:可可西里 更新时间:2023-11-01 01:06:57 25 4
gpt4 key购买 nike

case .foo:
defer {
baz()
}
fallthrough
case .bar:

baz() 在我们进入酒吧场景之前已经到达。这是预期的还是编译器 bork?我期待 baz() 在切换结束时被调用作用域还是函数作用域???!?

最佳答案

case: block 的结尾是该 block 范围的结尾...fallthrough 语句不维护范围。

考虑以下几点:

    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")
}

输出将是:

1

deferred

2

outer deferred

现在,考虑一下:

    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")
}

编译器会告诉您 str 是一个未解析的标识符,因为它是在 case 1: 中创建的,但不再在 case 2 的范围内:

关于 swift 延迟特殊性 : why is code in case:defer is invoked before the end of the switch scope?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57610020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com