Swift 闭包如何存储对常量或值的引用

Swift 闭包如何存储对常量或值的引用,swift,closures,Swift,Closures,描述来源于 闭包可以捕获并存储对定义它们的上下文中任何常量和变量的引用。这被称为关闭这些常量和变量 我不完全理解存储引用部分。这是否意味着它会创建某种指向变量的“指针”?如果值更改,“取消引用的指针”也更改为新值。我认为斯威夫特没有指针的概念。我借它来表达我的理解 如果有人能提供一个简单的代码行来解释闭包如何存储对常量/变量的引用,那就太好了 这是否意味着它会创建某种指向变量的“指针”?如果 值更改“取消引用的指针”也更改为新指针 价值观 对 我认为斯威夫特没有指针的概念 它以引用类型(类)的(

描述来源于

闭包可以捕获并存储对定义它们的上下文中任何常量和变量的引用。这被称为关闭这些常量和变量

我不完全理解存储引用部分。这是否意味着它会创建某种指向变量的“指针”?如果值更改,“取消引用的指针”也更改为新值。我认为斯威夫特没有指针的概念。我借它来表达我的理解

如果有人能提供一个简单的代码行来解释闭包如何存储对常量/变量的引用,那就太好了

这是否意味着它会创建某种指向变量的“指针”?如果 值更改“取消引用的指针”也更改为新指针 价值观

我认为斯威夫特没有指针的概念

它以引用类型(类)的(隐式)形式和

下面是一个在闭包中捕获变量的示例。这一切都是单线程的,但是您可以通过GrandCentralDispatch来调度这个闭包<捕获code>x,使其在闭包的整个生命周期内都存在,即使在
x
的声明范围(
f()
)退出后闭包仍然存在


我写了这篇文章来解释函数、闭包和其他术语之间的关系。我认为这是值得一读的。

如果你继续阅读Swift语言指南中的这一部分,你会看到他们展示并解释了一个
makeIncrementer
函数的示例,该函数演示了闭包如何将值捕获为引用。
runningTotal
变量被捕获为引用,允许多次调用返回函数(捕获
runningTotal
)来增加它,因为它引用了该变量–即使它是一种值类型。请注意,即使Swift作为一种语言在其中没有指针(比如JavaScript有闭包,但没有原始内存指针),这对Swift编译器输出的程序集没有影响。在程序集代码中会有许多间接引用(“指针”)。在Swift中许多非法的东西在swiftc输出中是完全合法的(例如,无界GOTO在编译器输出中很常见,但在语言中不存在)。非常感谢示例代码和进一步研究的资源)
func f() {
    var x = 0 //captured variable

    _ = {
       x = 5 //captures x from parent scope, and modifies it
    }()

    print(x) //prints 5, as x was modified by the closure
}

f()