自。在尾随快速闭包,意义和目的?

时间:2016-11-17 21:55:16

标签: swift scope closures

每当我在动作上使用尾随闭包时......例如:

run(SKAction.wait(forDuration: 10)){timeRemains = false}

我看到了这个:

  

关闭时对属性(任何)的引用需要明确地“自我”   使捕获语义显式化。

enter image description here

这是什么意思?它是关于什么的?我很好奇,因为我只是在我想要在尾随闭包中调用的属性或函数的上下文/范围中这样做,所以不知道为什么我需要`自我并着迷于使用单词< / p>

  

“语义”

这里。它是否具有深刻的意义,如果我明白这一点,我会神奇地理解闭包吗?

1 个答案:

答案 0 :(得分:4)

  

它是否有一些深刻的含义,如果我明白这一点,我会神奇地理解闭包吗?

不,不。或者,也许,也许,也许。

这种语法要求的原因是这可能真的一个闭包,也就是说,它可能捕获并保留其引用的环境(因为你是匿名函数)传递可能存储某处某处)。这意味着,如果您在此处引用self的某些属性,例如myProperty,则您实际上捕获对self的引用。斯威夫特要求你明确 (通过说self.myProperty而不仅仅是myProperty)来承认这个事实,以便明白这就是正在发生的事情。

为什么你需要了解它?因为在某些情况下,您最终可能会有一个保留周期,或者以某种其他方式保留self的生命,而这种方式并不是您所期望的。这是让你思考这个事实的一种方式。

(如果已知这个特定的函数将作为一个闭包,即它将立即执行 ,那么就没有这样的危险,Swift将会要求您明确说出self。)