Swift:" completionHandler:((Bool) - > Void)"意思?

时间:2018-02-23 14:32:29

标签: ios swift void completionhandler

有人能解释一下 completionHandler:((Bool) - > Void)是什么意思?

例如,它在请求摄像头访问时出现:

AVCaptureDevice.requestAccess(for: AVMediaType.depthData, completionHandler: (<#T##(Bool) -> Void#>))

我通常这样做是为了检查访问是否被授予:

func requestCamera() {
        AVCaptureDevice.requestAccess(for: AVMediaType.video) { (response) in
            if response {
                print("true")
            } else {
                print("denied")
            }
        }

    }

显然我在那里做事,但这并不重要。我只是想了解((Bool) - &gt; Void)的含义以及为什么我必须在这里使用完成处理程序。使用其他函数,我可以将处理程序设置为nil,但在这种情况下,它需要以某种方式响应。

那是什么意思?

4 个答案:

答案 0 :(得分:3)

阅读Swift documentation的封闭部分。

这是一个完成闭包,在AVCaptureDevice.requestAccess完成请求用户访问时执行。根据用户是否授予访问权限,它有一个Bool参数,该参数为true / false。它不是可选的,所以你必须提供一些闭包 - 这是AVCaptureDevice.requestAccess作者的决定,这是有道理的 - 如果你请求访问,你要求它,因为你想使用{{1 }}。因此,作者希望您以某种方式对完成AVCaptureDevice做出反应。

答案 1 :(得分:2)

Closure表达式语法具有以下一般形式:

{ (parameters) -> return type in
    statements
}

闭包表达式语法中的参数可以是输入输出参数,但它们不能具有默认值。如果命名variadic参数,则可以使用变量参数。元组也可以用作参数类型和返回类型。

completionHandler :((Bool) - &gt; Void)这意味着你将在闭包中得到一个布尔值,它将不返回任何内容(Void)。就像一种方法。

您可以在Apple's documentation about closures

中找到更多相关信息

答案 2 :(得分:2)

(Bool) -> Void表示闭包接受Bool作为参数并返回Void(即没有)。

您提供了一个完成处理程序,因为requestAccess是异步执行的。当用户确定了为您的应用提供的权限时,iOS将调用完成处理程序以继续执行您的程序。

答案 3 :(得分:0)

大多数闭包用于处理稍后可用的一些信息,例如,后端请求需要几秒钟才能响应,甚至在某些操作之前需要执行某些操作。

当你调用一个具有完成处理程序的函数时,它与将来要求某些内容相同,它将在信息可用时执行,它是异步内容的一个很好的解决方案,或者当你需要等待一些操作时,当你得到必要的数据时继续。