如何在函数外部突破警卫声明?

时间:2018-09-26 19:28:12

标签: swift optional swift-playground

我正在操场上运行一些代码。

var  optional:  Int?
guard let unwrapped = optional else {
    print("optional is nil")
    return
}
print("Optional is not nil”)

使用此当前代码,我得到一个错误,指出“在函数外部返回无效值”。如果将return替换为break,则会收到一条错误消息,指出break仅允许在循环或开关内使用。如果在print语句之后没有其他任何语句,则会收到一条错误消息,指出“后卫不得跌倒,请考虑使用返回或抛出来退出范围”。

3 个答案:

答案 0 :(得分:2)

在顶层,您可以使用fatalError()终止执行:

var  optional:  Int?
guard let unwrapped = optional else {
    fatalError("optional is nil")
}
print("Optional is not nil!")

可以编译程序。执行它将显示一个

  

错误:执行被中断

在“致命”行,

  

致命错误:可选为零:文件MyPlayground.playground,第5行

显示在控制台中。

答案 1 :(得分:1)

guard用于在不满足条件的情况下退出当前作用域。您可以使用returnthrow退出函数,或使用breakcontinue退出当前循环。问题是,您没有退出的范围。

如果您想在最高级别的Playground中使用guard而不崩溃(请参见Martin R's answer,了解崩溃的解决方案),则可以将语句包装在repeat-while false循环中以执行它们一次,然后在break的{​​{1}}子句中使用else

guard

或者按照马丁R在评论中的建议,在var optional: Int? repeat { guard let unwrapped = optional else { print("optional is nil") break } print("Optional is not nil, has value \(unwrapped)") } while false 中使用label: do { }范围:

break label

答案 2 :(得分:0)

您可以使用exit(_: Int)退出该过程。这样具有您想要的效果。

希望这会有所帮助!