2015-07-21 64 views
2

我从一个教程制作瓷砖游戏,它有它的一句代码:迅速SpriteKit SKNode类

var tile: SKNode? 

    switch tileCode { 
     case "g": 
      tile = SKSpriteNode(texture: atlas?.textureNamed("grassTile")) 

     default: 
     println("Unknown tilecode: \(tileCode)") 
    } 

我很困惑,瓷砖被声明为类型SKNode,但在switch语句它被制作成SKSpriteNode。为什么可以做到这一点?

+3

SKSpriteNode是SKNode的子类 – Codermonk

回答

0

您仍然可以访问tile作为SKNode,因为它是这样声明的,但它实际上会指向SKSpriteNode对象。这个原理和编译器没有抱怨的原因是SKSpriteNodeSKNode的一个子类,即它具有SKNode可能具有的所有属性和方法。整个概念被称为polymorphism,并与dynamic binding强烈关联。