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

时间:2016-06-21 18:02:18

标签: swift closures

说明来自swift office document

  

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

我不完全了解商店参考部分。这是否意味着它创造了某种"指针"变量?如果值改变了"去参考指针"也改为新的价值。我认为Swift没有指针概念。我借用它来表达我的理解。

非常好,有人可以提供一个简单的代码行来解释闭包如何存储引用到常量/变量。

1 个答案:

答案 0 :(得分:3)

  

这是否意味着它为变量创建某种“指针”?如果   值改变了“去引用指针”也改为新的   值。

  

我认为Swift没有指针概念。

它肯定是以(隐式)形式的引用类型(类)和UnsafePointer

的(显式)形式

这是一个在闭包中捕获的变量的示例。这一切都恰好是单线程的,但你可以通过大中央调度来调度这个闭包。捕获x以便它在闭包的整个生命周期中都存在,即使在x声明范围(f())退出后存在闭包。

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()

我写了another answer来解释函数,闭包和其他术语之间的关系。值得一读,IMO。