Swift 中的闭包
Closures in Swift
我一直在努力了解闭包的工作原理。我知道他们会捕捉他们的环境,但我不明白这是怎么发生的。
在代码中,
func make() {
print("Done")
}
func count( f: @escaping ()->()) -> () -> (){
var c = 0
return{
c = c + 1
f()
}
}
let countmake = count(f: make)
countmake()
countmake()
单步执行代码时,为什么会跳过 c
的声明,而是直接进入匿名函数?
提前致谢!
- 在调用
count
函数时,您只需声明一次c
变量。
当你调用countmake
函数时,你只调用了这个块(闭包):
{
c = c + 1
f()
}
因为你return这个块来自count
函数。
但是这个闭包保留了一个上下文。这意味着系统将所有从您的闭包中引用的变量保存在内存中。因此,c
变量仅定义一次,并且可从 countmake
函数获得。
我一直在努力了解闭包的工作原理。我知道他们会捕捉他们的环境,但我不明白这是怎么发生的。
在代码中,
func make() {
print("Done")
}
func count( f: @escaping ()->()) -> () -> (){
var c = 0
return{
c = c + 1
f()
}
}
let countmake = count(f: make)
countmake()
countmake()
单步执行代码时,为什么会跳过 c
的声明,而是直接进入匿名函数?
提前致谢!
- 在调用
count
函数时,您只需声明一次c
变量。 当你调用
countmake
函数时,你只调用了这个块(闭包):{ c = c + 1 f() }
因为你return这个块来自
count
函数。但是这个闭包保留了一个上下文。这意味着系统将所有从您的闭包中引用的变量保存在内存中。因此,
c
变量仅定义一次,并且可从countmake
函数获得。