我有一个功能,例如:
func myFunction(aString: String, aClosure: (intArg: Int) -> (Void)) -> String? {
aClosure(intArg: 1)
return aString
}
我故意简单地表达我的问题。我有两个问题。首先,有一个更好的方法来使用带有尾随闭包的函数:
if let newString = (myFunction("hello world") {
(intArg: Int) -> Void in
println("Do nothing")
}) {
println(newString)
}
我不想在函数调用周围放置那些额外的括号。
我的第二个问题 - 为什么"什么都不做"没打印?
答案 0 :(得分:2)
如果你真的想要内联闭包,我发现回到把尾随闭包放在函数括号中比在括号中包装整个函数+闭包更好。
所以:
if let newString = myFunction("hello world", { _->() in println("Do nothing") }) {
println(newString)
}
而不是:
if let newString = (myFunction("hello world") { _->() in println("Do nothing") }) {
println(newString)
}
如果我将代码粘贴到游乐场中, Do nothing
打印得很好 - 尽管只在时间轴(cmd-opt-enter)中,而不是在右边缘。
答案 1 :(得分:1)
我操纵它并以原始方式完成它并且它在我的项目打印中无效,但它仍然显示沙箱中的(0个元素)。但是,当我检查沙盒中的控制台输出时,它确实显示出来:
if let newString = myFunction("hello world", {
(intArg: Int) -> Void in
println("Do nothing")
}) {
println(newString)
}
答案 2 :(得分:0)
我的解决方案是使用if-let
部分正上方定义的本地函数或闭包。代码:
// the local function
func completion(intArg: Int) {
println("Do nothing")
}
// or closure
let completion: Int -> () = {_ in println("Do nothing")}
if let newString = myFunction("hello world", completion) {
println(newString)
}
我的第二个问题 - 为什么“什么都不做”没有印刷?
也许您没有在completion
myFunction