我正在操场上运行一些代码。
var optional: Int?
guard let unwrapped = optional else {
print("optional is nil")
return
}
print("Optional is not nil”)
使用此当前代码,我得到一个错误,指出“在函数外部返回无效值”。如果将return
替换为break
,则会收到一条错误消息,指出break
仅允许在循环或开关内使用。如果在print语句之后没有其他任何语句,则会收到一条错误消息,指出“后卫不得跌倒,请考虑使用返回或抛出来退出范围”。
答案 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
用于在不满足条件的情况下退出当前作用域。您可以使用return
或throw
退出函数,或使用break
或continue
退出当前循环。问题是,您没有退出的范围。
如果您想在最高级别的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)
退出该过程。这样具有您想要的效果。
希望这会有所帮助!