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 的声明,而是直接进入匿名函数?

提前致谢!

  1. 在调用count 函数时,您只需声明一次c 变量。
  2. 当你调用countmake函数时,你只调用了这个块(闭包):

    {
        c = c + 1
        f()
    }
    

    因为你return这个块来自count函数。

  3. 但是这个闭包保留了一个上下文。这意味着系统将所有从您的闭包中引用的变量保存在内存中。因此,c 变量仅定义一次,并且可从 countmake 函数获得。