35

我有以下guard语句,这会产生错误。怎么了?

guard NSFileManager.defaultManager().fileExistsAtPath(appBundlePath) else {
    print("App bundle doesn't exist")
}

错误:“守卫”身体可能不会掉落

错误:'guard' body 不能通过,考虑使用 'return' 或 'throw' 退出范围

4

3 回答 3

54

guard语句需要有一些东西来使程序流远离封闭范围(例如,最有可能的情况是return从函数返回)。这是必需的,因为守卫正在守卫的条件将无效,因此程序流程需要转到其他地方!

文档

保护语句的 else 子句是必需的,并且必须调用一个标有 noreturn 属性的函数,或者使用以下语句之一将程序控制转移到保护语句的封闭范围之外:

  • 返回
  • 休息
  • 继续
于 2015-06-30T12:25:23.393 回答
5

这是上述答案中解释的示例,以使其更清楚。

在程序的更外部范围内保护声明。

guard false else {
    print("Condition is not true ")
}
print("Condition met")

此代码 s 产生此错误语句

错误:如果 guard statement.playground:1:1: error: 'guard' body may not fall through, 请考虑使用 'return' 或 'throw' 退出范围

简单的错误信息意味着,您需要使用 return、break、continue 或 throw 语句从保护语句转移程序控制。

带回传控制语句

guard false else {
    print("Condition is not true")
    return
}
print("Condition met")

在控制台输出

条件满足

于 2018-05-06T12:42:55.253 回答
-2

考虑使用return语句

return 语句出现在函数或方法定义的主体中,并导致程序执行返回到调用函数或方法。

于 2018-02-10T13:50:09.873 回答