我想在 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() 的变量的正确方法是什么?
请您参考如下方法:
(character as Character).characterName = "new name"
Swift 的这个特性并不罕见。您已将 character 键入为 NSNode,因此这就是编译器所知道的全部内容。要告诉编译器它到底是什么类型的对象(例如 NSNode 的子类),您需要向下转换。
您的声明没有任何问题,前提是您愿意在每次想要访问角色功能时都放弃。但是您有什么理由不只是将 character 作为 Character 开始输入吗?毕竟,Swift 非常清楚这意味着它也是一个 NSNode。在我看来,您的多态性概念可能有些颠倒。
