2016-05-26 11 views
1

I for-Schleife eine habe zuzugreifen bekam, die durch Kinder eines SKNode sortiert, und aus irgendeinem Grund kann ich nur die Eigenschaften des Kindes Zugriff eines SKNode und nicht SKSpriteNode Eigenschaften, als Größe nach Gießen es.Unable Kind Eigenschaften von SKNode

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

Sein sagen, dass die Fliese, die gegossene als SKSpriteNode ist, ist ein SKNode. Es verhält sich immer noch wie ein SKNode, wenn es ein SKSpriteNode sein sollte. Irgendeine Reparatur zu diesem?

EDIT

Ich zwinge sie gerade gegossen mit

let tile = tile as! SKSpriteNode 

und das funktionierte. Ich hatte noch kein Problem, wenn du denkst, dass es eine unpassende Art ist, es zu übertragen, würde ich es gerne hören.

+1

Sie sollten eine Antwort auf Ihre eigene Frage liefern und die Frage nicht bearbeiten. – Rob

Antwort

0

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

Ich werde „Karte“ zu übernehmen ist ein SKNode (oder ein Teil davon). Die Dokumentation macht deutlich, dass die Eigenschaft children ein schreibgeschütztes Array von SKNode ist. Ihr "Where-is" prüft nur, ob ein SKNode ein SKSpriteNode ist, er wirft nichts.

Sobald die Bedingung erfüllt ist (weil der aktuell iterierte SKNode zu einem SKSpriteNode herabgestuft werden kann), liegt es an Ihnen, sie tatsächlich zu reduzieren. Das machst du jetzt und warum funktioniert es. Sie können den Downcast-Befehl jetzt wie gewohnt erzwingen, da Sie vorher prüfen, ob es sich um einen SKSpriteNode handelt.

EDIT: Hier ist eine Dokumentation über den Operator "is", der nur ein Operator ist, der true oder false zurückgibt. Dieser SKNode wird nicht in einen SKSpriteNode umgewandelt und im inneren Bereich verfügbar gemacht.

"Verwenden Sie den Typüberprüfungsoperator (is), um zu überprüfen, ob eine Instanz von einem bestimmten Unterklasse-Typ ist. Der Typüberprüfungsoperator gibt true zurück, wenn die Instanz von diesem Unterklasse-Typ ist und false, wenn dies nicht der Fall ist."

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