Skip to main content
 首页 » 操作系统

ios之使用父类(super class)型的引用快速声明子类型的变量

2024年01月01日51itcoder

我想在 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。在我看来,您的多态性概念可能有些颠倒。