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
不接受任何参数。由于放置错误的
,您的
工作实际上是一个可选的元组,而不是闭包类型