【问题标题】:Swift error: guard body must not fall throughSwift 错误:防护体不能通过
【发布时间】:2015-06-30 12:25:23
【问题描述】:

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

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

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

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

【问题讨论】:

  • 也许您愿意为不赞成票发表评论?这个答案显然帮助了一些人......

标签: swift guard-statement


【解决方案1】:

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

Documentation:

guard 语句的 else 子句是必需的,并且必须调用 用 noreturn 属性或传输程序标记的函数 使用其中之一控制守卫语句的封闭范围之外 以下陈述:

  • 返回
  • 打破
  • 继续
  • 投掷

【讨论】:

  • 调用一个返回 Never 的函数,比如 fatalError,是另一种选择。
【解决方案2】:

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

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

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

这段代码产生了这个错误语句

error: If guard statement.playground:1:1: error: 'guard' body may not 失败,考虑使用 'return' 或 'throw' 退出范围

简单的错误信息的意思是,您需要使用return、break、continue或throw语句将程序控制权从guard语句转移。

带有返回传输控制语句

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

控制台输出

条件满足

【讨论】:

    【解决方案3】:

    考虑使用return 语句

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-24
      • 2015-03-16
      • 2021-02-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 2020-06-26
      • 1970-01-01
      相关资源
      最近更新 更多