swift声明子类型的变量,引用超类型

时间:2014-12-25 03:52:48

标签: ios swift sprite-kit

我试图在swift中使用多态,但我做错了什么;我有以下情况:

class Character : NSNode {
 let characterName = "name"
}

class World : NSNode {
 let character : NSNode = Character()
 // getting error here, NSNode does not have a property "characterName"
 character.characterName = "new name" 
}

声明类型为Character()的变量的正确方法是什么,但是引用类型为NSNode()?

1 个答案:

答案 0 :(得分:3)

(character as Character).characterName = "new name"

Swift的这个功能并不罕见。您已将character键入为NSNode,因此所有编译器都知道它。要告诉编译器它实际上是什么类型的对象(例如NSNode的子类),你要抛弃它。

您的声明没有任何问题,只要您愿意在每次要访问角色功能时放弃。但是你有没有理由不仅仅打开character作为角色?毕竟,Swift完全知道这意味着它也是一个NSNode。在我看来,你的多态性概念可能有点颠覆。