2016-02-11 74 views
1
self.enumerateChildNodesWithName(spriteName) { 
     node, stop in 
     // Do something with node. 

}有人可以在Swift中解釋這個「停止」語法嗎?

這有點的SpriteKit SWIFT代碼我看的一個例子。

它看起來像C#的lambda表達式的等價物,但我不確定。

我想知道的一部分是stop in部分,它是什麼?

我試圖在Swift文檔中找到信息,但stop in太籠統,無法找到任何信息。

什麼是stop in?它在做什麼?

+1

這些是參數名稱。 – Sulthan

+0

https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKNode_Ref/#//apple_ref/doc/uid/TP40013023-CH1-SW9 – vikingosegundo

回答

5

的方法被聲明爲:

func enumerateChildNodesWithName(_ name: String, 
        usingBlock block: (SKNode, 
             UnsafeMutablePointer<ObjCBool>) -> Void) 

{}之間代碼的部分是一個尾隨閉合這是blocknodestop是參數名稱。它也可以寫成:

self.enumerateChildNodesWithName(spriteName) { 
     node: SKNode, stop: UnsafeMutablePointer<ObjCBool> in 

請參閱Swift指南中的Closures

stop參數是枚舉所有項目前停止枚舉的一種方法。有關更多信息,請參閱How to use "enumerateChildNodesWithName" with Swift in SpriteKit?。基本上使用它的唯一方法是設置stop.memory = true以防止下一個項目被枚舉。如果您正在搜索項目並且您已經找到您正在尋找的項目,這非常有用。

3

您正在查看「尾部閉合」,其中nodestop是傳遞給閉包的兩個參數。這是一種簡化的方式,它簡化了你編寫代碼的方式。在這種情況下,閉包用於評估每個子節點,因此node參數是要評估的節點,stop是一個讓閉包儘早退出枚舉的參數。

請參閱Closures並向下滾動到尾隨鎖釦部分,以獲得更全面的說明。

什麼是停止?它在做什麼?

如果你仔細觀察,stopin不同的顏色 - in是一個關鍵字,但stop僅僅是一個標識符。它可能很容易就是...n, s in...

+1

我沒有意識到停止只是一個參數,我認爲這是一個關鍵字,謝謝澄清 – SirPaulMuaddib

相關問題