我之前尝试过
ask this question,但没有明确表达我的问题,所以我会在这里再试一次.我也注意到
very similar sounding question,但它要求完全不同的东西.
我有以下代码:
class Base { func launch(code1: Int,code2: Int) { ... } } class A: Base {} class B: Base {} class C: Base {} let classes = [A.self,B.self,A.self,C.self] for cls in classes { let obj = ??? }
我想在循环中实例化一个cls类型的对象,并用它做一些事情.我可能在数组中有重复项,如图所示.我怎么代替???能够实例化适当的对象?
您只需要一个必需的init,一些方法来创建一个实例,该实例将在您希望其工作的所有类型之间共享.保存init方法的协议可以正常工作.
显然,当init不需要参数时,这种方法最简单.
缺点是您需要向下转换结果实例.
protocol ZeroParamaterInit { init() } class Base : ZeroParamaterInit { func launch(code1: Int,code2: Int) { } required init() { } } class A: Base {} class B: Base {} class C: Base {} let classes : [ZeroParamaterInit.Type] = [A.self,B.self] var instances : [Any] = [] for cls in classes { let instance = cls.init() instances.append(instance) } for instance in instances { if let test = instance as? A { print("A") } if let test = instance as? B { print("B") } if let test = instance as? C { print("C") } }