Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在我的函数Swift 3中放置completionHandler的位置_Swift_Completionhandler - Fatal编程技术网

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

在我的函数Swift 3中放置completionHandler的位置,swift,completionhandler,Swift,Completionhandler,我一直在努力学习Swift中的完成处理程序,但似乎找不到我问题的答案。如果我有多个完成处理程序,它们是否必须位于专用位置?例如,我可以拥有以下代码: func example(x:Int, completionHandler: @escaping (_ success: Bool) -> ()){ if x > 5 { completionHandler(true) } completionHandler(false) } 或者我必须将completi

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

func example(x:Int, completionHandler: @escaping (_ success: Bool) -> ()){
   if x > 5 {
      completionHandler(true)
   }
   completionHandler(false)
}
或者我必须将
completionHandler(false)
括在else语句中(例如,完成处理程序必须彼此排他)?如果是这样的话,有人能解释一下上述情况会如何发展吗?在函数中的所有代码完成执行后,我将完成处理程序理解为“返回值”。那么上面的场景会有两个不同的“返回值”吗

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


提前谢谢你

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

  • 当您在条件块中获得true
  • 当闭包被称为转义闭包时
  • 作为一个例子,我编写了一个单方法类,它通过打印传递的参数作为结果来演示闭包的行为

    您可以在下面看到结果

    在操场上试试。我会试试的。我没有意识到我可以这样做,因为我需要完成处理程序的代码使用的是Firebase!忘了我可以使这个例子哑口无言……如果你去掉了行
    completionHandler(false)
    ,并且你传递了
    x=4
    ,函数将永远不会命中第一个完成处理程序。然后呢?我试过了,旁边的
    (2次)
    显示为灰色。这是否意味着它只是不执行闭包?@kbunarjo如果您将
    4
    传递为x,则在if条件块中得到错误结果,而不会进入if体。因此,不要紧,if body块中的内容,您的第一个方法参数将小于或等于5。@kbunarjo在
    if
    block之后,您将继续从该方法向前移动。如果删除第二个完成处理程序,您只需从此方法返回,因为您的完成处理程序以前从未调用过。