Ios swift声明子类型的变量,引用超类型
我试图在swift中使用多态性,但我做错了什么;我有以下情况:Ios swift声明子类型的变量,引用超类型,ios,swift,sprite-kit,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 =
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()的变量的正确方法是什么
Swift的这一特点并不罕见。您已经将character
键入为NSNode,因此编译器只知道这一点。要告诉编译器它实际上是什么类型的对象(例如,NSNode的哪个子类),您可以向下转换
您的声明没有任何问题,只要您愿意在每次访问角色特性时放弃声明。但是你有什么理由不只是把
character
作为一个字符来输入吗?毕竟,Swift非常清楚这意味着它也是一个NSNode。在我看来,你对多态性的概念可能有点混乱。但这不是稍微失去了多态性的意义吗?我已经习惯了Java,在那里你可以说“Fruit a=new Apple()”,编译器可以看到super和sub-classI的所有属性,但我不能回答这个问题;我从未使用过一种对多态性的含义有如此奇特想法的语言在Ruby中有“duck-typing”,意思是任何消息都可以发送到任何东西,你要抓住机会;但是斯威夫特的类型正好相反——它是超严格和确定的。也许先学习Java不是一个好主意:/-这是一件好事,在我看来,强类型语言更干净
(character as Character).characterName = "new name"