我想保留一个包含几个类的数组,并根据需要实现它们。这是一些演示代码:
class AClass {
func areYouThere() -> String {
return "Yes, I am!"
}
}
class FirstClass: AClass {
override func areYouThere() -> String {
return "Yes, I am #1!"
}
}
class SecondClass: AClass {
override func areYouThere() -> String {
return "Yes, I am #2!"
}
}
let className = FirstClass.self
let classReferences: [AClass.Type] = [FirstClass.self, SecondClass.self]
let instanceOfClass = classReferences[0].init()
let test = instanceOfClass.areYouThere()
代码确实编译,但是当我运行它时,“test”将保持“是的,我是!” (没有#1),因为instanceOfClass是“AClass”的实例,而不是“FirstClass”。我想,我的Array的类型[AClass.Type]是错误的。我也试过“AnyClass”,但是比编译器抱怨的那样,“init”没有在“AnyClass”中定义。有什么想法吗?
谢谢! INGO。
答案 0 :(得分:2)
您的基类需要required init()
初始值设定项。
class AClass {
required init() {} // <- HERE
func areYouThere() -> String {
return "Yes, I am!"
}
}
因为子类may not inherit init()
initializer。
IMO,这是一个编译错误。编译器应报告classReferences[0]
可能没有init()
。
let instanceOfClass = classReferences[0]()
无需撰写.init
。