斯威夫特的documentation on closures州:
Swift的闭包表达式具有干净,清晰的风格,优化可以在常见场景中鼓励简洁,无杂乱的语法。这些优化包括:
- 从上下文中推断参数和返回值类型
- 单表达式闭包的隐式返回
- 速记参数名称
- 尾随关闭语法
Swift闭包的“尾随闭包语法”究竟是什么?
答案 0 :(得分:2)
在函数调用的括号后面写上结尾的闭包,即使它仍然是函数的参数。使用尾随闭包语法时,请勿在函数调用的过程中为闭包编写参数标签。
func doSomething(number:Int, onSuccess closure:(Int)->Void) {
closure(number * number * number)
}
doSomething(number: 100) { (numberCube) in
print(numberCube) // prints 1000000
}
函数调用中没有参数标签onSuccess。即使闭包包含在函数参数列表中,swift也会将其从参数块中删除,以使代码更具可读性。
答案 1 :(得分:1)
- 一个闭包表达式,写在(和之后)之外 函数的括号称为支持
醇>
你有一个需要函数作为参数的函数
func fooFunc(paramfunc: () -> Void) {
paramfunc();
}
调用函数并给出函数作为参数,但参数在paranthesis之外,因此trailing函数作为参数。但它没有名称,它是一个匿名函数,所以它必须是一个闭包。 Tada是一个尾随的关闭。
fooFunc() { () -> Void in
print("Bar");
}
答案 2 :(得分:0)
如果您需要将闭包表达式作为函数的最终参数传递给函数,并且闭包表达式很长,那么将其写为尾随闭包可能会很有用。即使在函数调用的参数后面,也要在函数调用的括号后面加上结尾的闭包。使用尾随闭包语法时,请勿在函数调用的过程中为闭包编写参数标签。
func funcWithATrailingClosure(closure: () -> Void) {
// function body goes here
}
// Here's how you call this function without using a trailing closure:
funcWithATrailingClosure(closure: {
// closure's body goes here
})
// Here's how you call this function with a trailing closure instead:
funcWithATrailingClosure() {
// trailing closure's body goes here
}
答案 3 :(得分:0)
尾随关闭
如果您需要将闭包表达式作为函数的最终参数传递给函数,并且闭包表达式很长,那么将其写为尾随闭包可能会很有用。即使在函数调用的参数后面,也要在函数调用的括号后面加上结尾的闭包。使用尾随闭包语法时,请勿在函数调用的过程中为闭包编写参数标签。
func someFunctionThatTakesAClosure(closure: () -> Void) {
// function body goes here
}
// Here's how you call this function without using a trailing closure:
someFunctionThatTakesAClosure(closure: {
// closure's body goes here
})
// Here's how you call this function with a trailing closure instead:
someFunctionThatTakesAClosure() {
// trailing closure's body goes here
}