语法

 

guard

 

findObjectsInBackground({_,_}) in

if error == nil {
    guard let objects = objects, objects.count > 0 else {return}
   }

  guard于if语句类似,它们的相同点是,guard也是基于一个表达式的布尔值去判断一段代码是否要执行。与if语句不同的是,guard只有在条件不满足的时候才会执行else中的代码。我们可以把guard近似看作Assert,但是guard可以更优雅地退出而非崩溃。

  guard语句有以下三个特点:

  •   guard是对你期望的条件做检查,而非不符合你期望的。在上面的代码中,如果条件不符合,guard的else语句就运行,从而退出闭包函数。
  •   如果通过了条件判断,可选类型的变量在guard语句被调用的范围内会自动拆包。在上面的代码中,我们通过guard let objects = objects语句,将可选对象objectsc拆包,因此在接下来的程序中可以直接使用objects而不必加!,且其生存期范围是findObjectsInBackground()函数闭包的内部。这是一个重要且有点奇怪的特性,但让guard语句非常实用。在guard语句我们还进一步判断数组是否包含元素。
  •   对不期望的情况早做检查,使得函数更易读,更易维护。