2015-07-21 48 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強烈關聯。