我正在从一个教程制作一个平铺游戏,它里面有一些代码:
var tile: SKNode?
switch tileCode {
case "g":
tile = SKSpriteNode(texture: atlas?.textureNamed("grassTile"))
default:
println("Unknown tilecode: \(tileCode)")
}
我很困惑,因为tile被声明为类型SKNode,但在switch语句中它被制作成SKSpriteNode。为什么可以这样做?
答案 0 :(得分:0)
您仍然可以访问tile
作为SKNode,因为它是这样声明的,但它实际上会指向SKSpriteNode
个对象。这有效并且编译器没有抱怨的原因是SKSpriteNode
是SKNode
的子类,即它具有SKNode
所具有的所有属性和方法。整个概念称为polymorphism,与dynamic binding强烈相关。