为什么不守卫执行?

时间:2017-01-30 04:19:20

标签: swift3

我有以下内容:

guard let _ = myfunction() else {
  print("guard just executed")
  return false
}

myfunction返回false但是守卫内的代码没有被执行。是不是警卫应该执行的正确场景?

该功能定义为:

func myfunction() -> Bool?

但只返回true或false(不是选项)。

3 个答案:

答案 0 :(得分:2)

guard let用于包装可选值,以便在您的情况下guard let _ = myfunction() else {始终返回true,如果您还要检查(比较)其值,则需要再添加一个条件{{ 1}}语句以这种方式由guard分隔。

,

答案 1 :(得分:2)

如果let _ = myfunction()的结果不是零,

true评估为myfunction(),无论其返回Int?String?Bool?,如果结果不是nil,则打开的Bool?值是true还是false并不重要,就像{Int?的展开值一样无关紧要guard let _ = myfunction() else {} 1}}是5,37或2089。

仅当myfunction的结果为零时,

{{1}}才会进入保护状态。

答案 2 :(得分:1)

guard let需要一个可选参数,如果你只需要检查一个布尔结果就有一个更简单的语法

guard myfunction() else { ...