Swift 错误:防护体不能通过

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

也许您愿意为不赞成票发表评论?这个答案显然帮助了一些人...... 【参考方案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 语句出现在函数或方法定义的主体中,并导致程序执行返回到调用函数或方法。

【讨论】:

以上是关于Swift 错误:防护体不能通过的主要内容,如果未能解决你的问题,请参考以下文章

在我的 swift SpriteKit 游戏中,物理体的轮廓通过所有其他节点显示

Swift 的 结构体

Swift 结构体的使用

Swift中结构体的方法调度&内存分区

通过 Alamofire + Swift 2 发布参数的语法

Swift 5.1 (10) - 属性