【发布时间】:2018-08-03 15:29:12
【问题描述】:
谁能解释一下 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) -> Void) 的含义以及为什么我必须在这里使用完成处理程序。使用其他函数,我可以将处理程序设置为 nil,但在这种情况下,它期望以某种方式得到响应。
那么这是什么意思呢?
【问题讨论】:
-
注意:这是使用尾随闭包语法。调用之后的闭包作为调用的最后一个参数提供。
{ (response) in和}之间的所有内容都是一个闭包,它接受Bool并且不返回任何内容。此闭包以completionHandler的形式提供给requestAccess,当函数调用completionHandler(true)或可能与false一起调用时,您的闭包将执行。 -
此完成处理程序不期望 来自您的响应,它会在您的应用用户决定授予 / 后通知您拒绝 (
Bool) 捕获视频的权限 - 您显然希望获得有关此的反馈,因为您的应用下一步操作取决于用户的决定。
标签: ios swift void completionhandler