Swift 在闭包内调用闭包
这是我的代码:Swift 在闭包内调用闭包,swift,closures,Swift,Closures,这是我的代码: var work: ((Int, completionHandler: (() -> ()) -> ()))? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { work(1, { // Does not
var work: ((Int, completionHandler: (() -> ()) -> ()))?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
work(1, {
// Does not work.
})
workAsMethod(amount: 1) {
// Works.
}
work = { (amount, completionHandler) in
// Does not work
completionHandler()
}
return true
}
func workAsMethod(amount: Int, completionHandler: @escaping (() -> ())) {
// Works
completionHandler()
}
当我对一个块使用一个方法时,我可以调用它来指示工作已经完成,它就工作了。当我试图在闭包内做同样的事情时(闭包内闭包),我无法让它工作
在闭包中调用闭包以通知“侦听器”工作已完成的正确语法是什么?您的
工作类型
闭包所需的工作:
var work: ((Int, _ completionHandler: () -> ()) -> ())?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Use optional chaining here to unwrap work before calling
work?(1, {
// This now works.
})
workAsMethod(amount: 1) {
// Works.
}
work = { (amount, completionHandler) in
// This now works
completionHandler()
}
return true
}
func workAsMethod(amount: Int, completionHandler: @escaping (() -> ())) {
// Works
completionHandler()
}
work
是一个可选的闭包,它接受一个Int
和一个()->()
,并且不返回任何内容
如果您为工作
分解类型,则您的完成处理程序
的类型为(()->())->(
),这意味着您的完成处理程序
接受一个()->(
闭包,并且不返回任何内容。您希望您的completerHandler
不接受任何参数。由于放置错误的(
和)
,您的工作实际上是一个可选的元组,而不是闭包类型