2016-05-26 40 views
1
的子屬性

我有一個for循環,整理着一個SKNode的孩子,出於某種原因,我只能訪問SKNode孩子的性質,而不是SKSpriteNode屬性,作爲尺寸後鑄造它。無法訪問SKNode

for tile in map.children where tile is SKSpriteNode { 
    let tileBody = CGRect(origin: tile.position, size: tile.size) 
} 

它說,這是瓷磚鑄造SKSpriteNode,是SKNode。它仍然像SKNode當它應該是SKSpriteNode。任何解決這個問題?

編輯

我只是強制用

let tile = tile as! SKSpriteNode 

鑄造它和工作。我還沒有遇到問題,如果您認爲這是一種不恰當的投射方式,我很樂意聽到它。

+1

應提供一個答案,你自己的問題,而不是編輯的問題。 – Rob

回答

0

https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKNode_Ref/

我要去承擔「地圖」是一個SKNode(或它的一個子)。該文檔清楚地表明,子屬性是SKNode的只讀數組。你的「where - is」只檢查一個SKNode是否是SKSpriteNode,它不會投射任何東西。

一旦條件通過(因爲當前迭代的SKNode可以向下轉換爲SKSpriteNode),實際上向下轉換它是由你決定的。這就是你現在正在做的以及它爲什麼會起作用。您可以像現在一樣安全地強制執行,因爲您要事先檢查它是否是SKSpriteNode。

編輯:這裏是關於你正在使用的「is」操作符的一些文檔,它只是一個返回true或false的操作符,它不會將該SKNode強制轉換爲SKSpriteNode並使其在內部範圍中可用。

「使用類型檢查運算符(是)來檢查某個實例是否屬於某個子類類型。如果實例屬於該子類類型,則類型檢查運算符返回true,如果不是,則返回false。

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html