将completionHandler放在我的函数Swift 3中的哪个位置

时间:2017-01-16 00:25:44

标签: swift completionhandler

我一直在努力学习Swift中的完成处理程序,但似乎无法找到我的问题的答案。如果我有多个完成处理程序,它们是否必须在专属位置?例如,我可以使用代码:

func example(x:Int, completionHandler: @escaping (_ success: Bool) -> ()){
   if x > 5 {
      completionHandler(true)
   }
   completionHandler(false)
}

或者我是否必须将completionHandler(false)括在else语句中(例如,完成处理程序是否必须在彼此的独占位置)?如果是这样,有人可以解释上述情况将如何发挥作用?我理解完成处理程序的方式为"返回值"在函数中的所有代码完成执行之后。那么上面的场景会有2个不同的"返回值"?

另外,如果我没有包含第二个completionHandler和x = 4,会发生什么?这会如何影响调用此函数的代码?

提前谢谢!

1 个答案:

答案 0 :(得分:1)

如您所见,如果您将6作为第一个参数传递,则closure将执行两次:

  1. 当您在条件块中获得 true 时;
  2. 当封闭被称为逃逸时。
  3. 作为一个例子,我编写了一个单方法类,它通过打印传递的参数来演示闭包的行为。

    您可以在下面看到结果