如何在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

+0

就是这样!谢谢! – 2015-02-23 12:46:46