有人能解释一下 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,但在这种情况下,它需要以某种方式响应。
那是什么意思?
答案 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)。就像一种方法。
中找到更多相关信息答案 2 :(得分:2)
(Bool) -> Void
表示闭包接受Bool
作为参数并返回Void
(即没有)。
您提供了一个完成处理程序,因为requestAccess
是异步执行的。当用户确定了为您的应用提供的权限时,iOS将调用完成处理程序以继续执行您的程序。
答案 3 :(得分:0)
大多数闭包用于处理稍后可用的一些信息,例如,后端请求需要几秒钟才能响应,甚至在某些操作之前需要执行某些操作。
当你调用一个具有完成处理程序的函数时,它与将来要求某些内容相同,它将在信息可用时执行,它是异步内容的一个很好的解决方案,或者当你需要等待一些操作时,当你得到必要的数据时继续。