语法
以下定义了一个接收参数并返回指定类型的闭包语法:
{ (parameters) -> return type in
statements
}
尾随闭包
尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用
func someFunctionThatTakesAClosure(closure: () -> Void) {
// 函数体部分
}
// 以下是不使用尾随闭包进行函数调用
someFunctionThatTakesAClosure( { // 闭包主体部分} )
// 以下是使用尾随闭包进行函数调用
someFunctionThatTakesAClosure() { // 闭包主体部分}
捕获值
闭包可以在其定义的上下文中捕获常量或变量。
即使定义这些常量和变量的原域已经不存在,闭包仍然可以在闭包函数体内引用和修改这些值。
Swift最简单的闭包形式是嵌套函数,也就是定义在其他函数的函数体内的函数。
嵌套函数可以捕获其外部函数所有的参数以及定义的常量和变量。
看这个例子:
func makeIncrementor(forIncrement amount: Int) -> () -> Int {
var runningTotal = 0
func incrementor() -> Int {
runningTotal += amount
return runningTotal
}
return incrementor
}
//定义闭包类型(特定的函数类型函数类型)
typealias InputClosureType = (String) -> Void
//接收上个页面传过来的闭包块
var backClosure: InputClosureType?
//使用
self.backClosure!(tempString)
//回调
secondVC.backClosure = {
(backStr: String) -> Void in
self.showTextLabel.text = backStr
}