如何在Swift中创建一个类(存储在数组中)?
问题描述:
我想保留几个类的数组,并按需求实例化它们。下面是一些演示代码:如何在Swift中创建一个类(存储在数组中)?
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()
代码没有编译,但是当我运行它,“测试”将继续“是的,我在这里!” (没有#1),因为instanceOfClass是“AClass”的一个实例,而不是“FirstClass”。我猜,我的Array的类型[AClass.Type]是错误的。我也尝试过“AnyClass”,但比编译器抱怨,“init”没有在“AnyClass”中定义。有任何想法吗?
谢谢! Ingo。
答
您需要在您的基类中使用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
。
就是这样!谢谢! – 2015-02-23 12:46:46