你想要这样的函数:
func start(startupHandler:(configuration: WTStartupConfiguration)->(), completion:(isRunning:Bool, error:NSError?)->()) {
let configuration = WTStartupConfiguration() // create your configuration
startupHandler(configuration:configuration) // call your startup handler closure
... // do some stuff
let isRunning = false // replace with actual logic
let error = nil // replace with your actual error detection
completion(isRunning: isRunning, error: error) // call completion closure
}
然后你可以这样称呼它:
start(
{ configuration in
// do something with your configuration
}, completion: {isRunning, error in
// do something with your isRunning & error.
})
闭包是用语法定义的(arguments) -> (returns)
,你替换的地方arguments
与您的输入和回报与您outputs
(很像函数的定义方式)。
在您的情况下,您的闭包不会返回任何内容,因此我们将它们定义为:
(isRunning:Bool, error:NSError?) -> ()
(其中一个空元组()
用于表明没有返回任何内容)
然后创建它们,并使用以下简写符号将它们传递到函数中(如果闭包的参数类型已知):
closureArgument: { (arguments here, without types as they're known) in
}
closureArgument: { isRunning, error in
}
将它们传递给函数的更正式的方法是:
closureArgument: { (arguments with types) -> (returns with types) in
}
closureArgument: { (isRunning:Bool, error:NSError?) -> () in
}
然后,您可以以与调用函数几乎相同的方式调用闭包。
closureArgument(isRunning: false, error: nil)
I find 这个网站 http://fuckingswiftblocksyntax.com/非常适合参考闭包语法(并且可能比我更好地解释它)。