gpt4 book ai didi

swift - 不执行延迟 block

转载 作者:搜寻专家 更新时间:2023-10-31 08:15:23 25 4
gpt4 key购买 nike

我在 playground 中执行了以下 swift 代码:

func A() {
print ("Hello")
guard 1 == 2 else {
return
}
defer {
print ("World")
}
}

A()

我希望看到

Hello
World

相反,仅打印 Hello。为什么是这样?我错过了什么?

这是一个更好的例子:

enum MyError: ErrorType {
case TriggerDefer
}

func throwsMyError() throws {
let myzero = Int(arc4random_uniform(1))

guard myzero > 1 else {
throw MyError.TriggerDefer
}
}

func A() throws {
try throwsMyError()

defer {
print ("Hello World")
}
}

根据答案和评论,正确的方法(举例)是

enum MyError: ErrorType {
case TriggerDefer
}

func throwsMyError() throws {
let myzero = Int(arc4random_uniform(1))

print("Hello")

guard myzero > 1 else {
throw MyError.TriggerDefer
}
}

func A() throws {
defer {
print ("World")
}

try throwsMyError()
}

现在的输出是

Hello
World

最佳答案

您缺少的是 defer 不是魔法。它是可执行代码,就像任何其他代码一样。如果执行路径从未遇到它,则没有什么可以推迟的。这就是为什么它应该总是先死在它要执行的 block 中——这样我们保证遇到的.

关于swift - 不执行延迟 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36169415/

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