斯威夫特2:守卫体可能不会因误差而跌倒

时间:2015-06-30 12:25:23

标签: swift2

我有以下警卫片段,它产生的错误是“警卫体可能无法通过”。怎么了?

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

3 个答案:

答案 0 :(得分:48)

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

Documentation

  

保护声明的else子句是必需的,必须要么调用   标有noreturn属性或传输程序的函数   使用其中一个来控制守卫声明的封闭范围   以下陈述:

     
      
  • 返回
  •   
  • 休息
  •   
  • 继续
  •   
  •   

答案 1 :(得分:1)

考虑使用wait.Until((d) => { return JavascriptInjector.GetDocumentReadyState(d) == expectedReadyState; }); 声明

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

答案 2 :(得分:0)

以下是上述答案中解释的内容的示例,以使其更加清晰。

守卫声明在更多的程序范围内。

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

此代码生成此错误语句

  

错误:如果是guard statement.playground:1:1:错误:'警卫'身体可能没有   通过,考虑使用' return'或者'扔掉'退出范围

简单的错误信息意味着,您需要使用return,break,continue或throw语句从guard语句传输程序控制。

带回程转移控制声明

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

在控制台中输出

  

满足条件