闭包:就是一个函数和它所捕获的变量/常量环境组合起来,称为闭包。
1.一般定义在函数内部的函数。
2.一般它捕获的是外层函数的局部变量/常量。
可以把闭包想像成是一个类的实例对象。
1.内存在堆空间。
2.捕获的局部变量/常量就是对象的成员(存储属性)。
3.组成闭包的函数就是类内部定义的方法。
typealias Fn = (Int) -> Int
func getFn() -> Fn {
var num = 0
func plus(_ i: Int) -> Int {
num += i
return num
}
return plus
}
func getFn() -> Fn {
var num = 0
return {
num += $0
return num
}
}
var fn1 = getFn()
var fn2 = getFn()
fn1(1) // 1
fn2(2) // 2
fn1(3) // 4
fn2(4) // 6
fn1(5) // 9
fn2(6) // 12
class Closure {
var num = 0
func plus(_ i: Int) -> Int {
num += I
return num
}
}
var cs1 = Closure()
var cs2 = Closure()
cs1.plus(1) // 1
cs2.plus(2) // 2
cs1.plus(3) // 4
cs2.plus(4) // 6
cs1.plus(5) // 9
cs2.plus(6) // 12
网友评论