Swift的关闭

问题描述 投票:0回答:1

我一直试图了解闭包是如何工作的。我了解他们捕获了他们的环境,但是我不了解这种情况如何发生。

在代码中,

func make() {
    print("Done")
}

func count( f: @escaping ()->()) -> () -> (){
    var c = 0
    return{
        c = c + 1
        f()
    }
}

let countmake = count(f: make)

countmake()
countmake()

单步执行代码时,为什么会跳过c的声明,而直接进入匿名函数?

提前感谢!

swift closures
1个回答
0
投票
  1. 调用c函数时,仅声明一次count变量。
  2. [当您调用countmake函数时,仅调用此块(关闭):

    {
        c = c + 1
        f()
    }
    

    因为从count功能返回了该块。

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

© www.soinside.com 2019 - 2024. All rights reserved.