我一直试图了解闭包是如何工作的。我了解他们捕获了他们的环境,但是我不了解这种情况如何发生。
在代码中,
func make() {
print("Done")
}
func count( f: @escaping ()->()) -> () -> (){
var c = 0
return{
c = c + 1
f()
}
}
let countmake = count(f: make)
countmake()
countmake()
单步执行代码时,为什么会跳过c
的声明,而直接进入匿名函数?
提前感谢!
c
函数时,仅声明一次count
变量。 [当您调用countmake
函数时,仅调用此块(关闭):
{
c = c + 1
f()
}
因为从count
功能返回了该块。
但是此闭包保留上下文。这意味着系统将所有从闭包中引用的变量保存在内存中。因此,c
变量仅定义一次,并且可以通过countmake
函数使用。