Swift:"completionHandler: ((Bool) -> Void)"是什么意思?
Swift: What does "completionHandler: ((Bool) -> Void)" mean?
谁能解释一下 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,但在这种情况下,它期望以某种方式得到响应。
那么这是什么意思?
闭包表达式语法具有以下一般形式:
{ (parameters) -> return type in
statements
}
闭包表达式语法中的参数可以是in-out个参数,但不能有默认值。如果您命名可变参数,则可以使用可变参数。元组也可以用作参数类型和 return 类型。
completionHandler: ((Bool) -> Void) 这意味着你会在你的闭包中得到一个布尔值并且它不会 return nothing(Void) .就像一个方法。
中找到更多相关信息
(Bool) -> Void
表示闭包接受一个 Bool
作为参数并且 return 一个 Void
(即什么都没有)。
您提供了一个完成处理程序,因为 requestAccess
异步执行。当用户决定授予您的应用程序什么权限时,iOS 将调用完成处理程序以继续执行您的程序。
阅读 Swift documentation 的闭包部分。
这是一个完成闭包,当 AVCaptureDevice.requestAccess
完成对用户的访问请求时执行。根据用户是否授予访问权限,它有一个 Bool
参数,即 true/false。它不是可选的,所以你必须提供一些关闭 - 这是 AVCaptureDevice.requestAccess
作者的决定,这是有道理的 - 如果你请求访问,你请求它是因为你想使用 AVCaptureDevice
.因此,作者希望您以某种方式对完成 requestAccess
做出反应。
大多数闭包用于处理一些稍后可用的信息,例如,后端请求需要几秒钟才能响应,甚至在执行某些操作之前需要执行一些操作。
当你调用一个有完成处理程序的函数时,它就像在将来请求一些东西,它将在信息可用时执行,这是异步东西或当你需要等待时的一个很好的解决方案一些操作,然后在您获得必要的数据后继续。
谁能解释一下 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,但在这种情况下,它期望以某种方式得到响应。
那么这是什么意思?
闭包表达式语法具有以下一般形式:
{ (parameters) -> return type in
statements
}
闭包表达式语法中的参数可以是in-out个参数,但不能有默认值。如果您命名可变参数,则可以使用可变参数。元组也可以用作参数类型和 return 类型。
completionHandler: ((Bool) -> Void) 这意味着你会在你的闭包中得到一个布尔值并且它不会 return nothing(Void) .就像一个方法。
中找到更多相关信息(Bool) -> Void
表示闭包接受一个 Bool
作为参数并且 return 一个 Void
(即什么都没有)。
您提供了一个完成处理程序,因为 requestAccess
异步执行。当用户决定授予您的应用程序什么权限时,iOS 将调用完成处理程序以继续执行您的程序。
阅读 Swift documentation 的闭包部分。
这是一个完成闭包,当 AVCaptureDevice.requestAccess
完成对用户的访问请求时执行。根据用户是否授予访问权限,它有一个 Bool
参数,即 true/false。它不是可选的,所以你必须提供一些关闭 - 这是 AVCaptureDevice.requestAccess
作者的决定,这是有道理的 - 如果你请求访问,你请求它是因为你想使用 AVCaptureDevice
.因此,作者希望您以某种方式对完成 requestAccess
做出反应。
大多数闭包用于处理一些稍后可用的信息,例如,后端请求需要几秒钟才能响应,甚至在执行某些操作之前需要执行一些操作。
当你调用一个有完成处理程序的函数时,它就像在将来请求一些东西,它将在信息可用时执行,这是异步东西或当你需要等待时的一个很好的解决方案一些操作,然后在您获得必要的数据后继续。