我试图编写一个我可以使用尾随闭包语法调用的函数,如下所示:
func hello( message: String, closure: (( msg: String ) -> Void)?) {
println( "called hello with: \(message)" );
closure?( msg: message );
}
我希望能用一个闭包来调用这个函数:
hello( "abc" ) { msg in
let a = "def";
println("Called callback with: \(msg) and I've got: \(a)");
};
并且没有关闭,因为它是可选的:
hello( "abc" )
后者不起作用。它说我不能用(String)的参数列表调用hello。
我正在使用XCode 6.3.2,我在游乐场中测试了这段代码。
答案 0 :(得分:3)
我不确定你的可选定义完全正确。这并不意味着您不需要为closure
参数提供值;这意味着closure
可以有一个值(在你的情况下是一个闭包)或者是nil
。因此,如果您想在不提供闭包的情况下调用hello
,您可以写:
hello("abc", nil)
但是,您可以在使用默认参数值后实现目标(我建议您查看The Swift Programming Guide: Functions)。你的职能是:
// Note the `= nil`:
func hello(message: String, closure: ((msg: String ) -> Void)? = nil) {
println("called hello with: \(message)")
closure?(msg: message)
}
// Example usage:
hello("abc")
hello("abc") { println($0) }