2016-11-17 46 views
2

每當我使用尾隨封閉上的動作......例如:自我。在快速關閉,意義和目的?

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

我看到這一點:

參考封閉性(任何)需要明確的「自我」 明確捕獲語義。

enter image description here

這是什麼意思?它是關於什麼的?我很好奇,因爲我只是在屬性或函數的上下文/範圍內做這個事情,我想在追尾的閉包中調用,所以不知道爲什麼我需要'自我',並且使用單詞

「語義」

這裏。它是否有深刻的含義,如果我理解了這一點,我會神奇地理解閉包嗎?

回答

4

它有一些深刻的含義,如果我明白這一點,我會神奇地理解閉包嗎?

否和否。或者,也許,也許。

這樣做的原因語法的需求,這可能真的閉合,也就是說,它可以捕捉並保留其引用的環境(因爲要傳遞的匿名函數可能是存儲某處的而)。這意味着如果您在此引用self的某些屬性,如myProperty,則您實際上是捕獲對self的引用。斯威夫特要求你承認這一事實明確(通過說self.myProperty,而不僅僅是myProperty),以便明白,這是發生了什麼事。

爲什麼你需要了解它?因爲在某些情況下,您最終可能會有一個保留週期,或者以其他方式保留self的使用期限,這是您沒有預料到的。這是讓你考慮這個事實的一種方式。

(如果知道,這個特殊的功能將充當閉合,即它會被執行立即,那麼有沒有這樣的危險,SWIFT將需求,你說self明確)

+0

優秀的答案! Apple的Swift編程語言指南詳細介紹了「閉環強參考週期」[https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html#//apple_ref/doc/UID/TP40014097-CH20-ID48)。 –