每当我在动作上使用尾随闭包时......例如:
run(SKAction.wait(forDuration: 10)){timeRemains = false}
我看到了这个:
关闭时对属性(任何)的引用需要明确地“自我” 使捕获语义显式化。
这是什么意思?它是关于什么的?我很好奇,因为我只是在我想要在尾随闭包中调用的属性或函数的上下文/范围中这样做,所以不知道为什么我需要`自我并着迷于使用单词< / p>
“语义”
这里。它是否具有深刻的意义,如果我明白这一点,我会神奇地理解闭包吗?
答案 0 :(得分:4)
它是否有一些深刻的含义,如果我明白这一点,我会神奇地理解闭包吗?
不,不。或者,也许,也许,也许。
这种语法要求的原因是这可能真的是一个闭包,也就是说,它可能捕获并保留其引用的环境(因为你是匿名函数)传递可能存储某处某处)。这意味着,如果您在此处引用self
的某些属性,例如myProperty
,则您实际上捕获对self
的引用。斯威夫特要求你明确 (通过说self.myProperty
而不仅仅是myProperty
)来承认这个事实,以便你明白这就是正在发生的事情。
为什么你需要了解它?因为在某些情况下,您最终可能会有一个保留周期,或者以某种其他方式保留self
的生命,而这种方式并不是您所期望的。这是让你思考这个事实的一种方式。
(如果已知这个特定的函数将不作为一个闭包,即它将立即执行 ,那么就没有这样的危险,Swift将会不要求您明确说出self
。)