如何使用AnyClass初始化swift3.x中的特定类实例

如何使用AnyClass初始化swift3.x中的特定类实例,swift,init,Swift,Init,我在stackoverflow上看到过这个问题,不幸的是,这个答案在swift3.x中没有帮助 我想将类A和B存储在一个数组中 var array = [Effect.Type]() array.append(A.self) array.append(B.self) 当我想从数组中获取类A和B时,我得到这个结果 A.self // __lldb_expr_23.A.Type A.self.init().des() -> This i A array[0] // __lldb_expr

我在stackoverflow上看到过这个问题,不幸的是,这个答案在swift3.x中没有帮助

我想将类A和B存储在一个数组中

var array = [Effect.Type]()
array.append(A.self)
array.append(B.self)
当我想从数组中获取类A和B时,我得到这个结果

A.self   // __lldb_expr_23.A.Type
A.self.init().des() -> This i A
array[0] // __lldb_expr_23.A.Type
array[0].init().des() -> Error

我知道我可以用这个方法初始化类A

let a = array[0] as! A.Type
a.init().des() -> This is class A
但是如果我不确切知道类,我就不能通过Effect.Type初始化该类 那么,如何使用AnyClass来初始化特定的类实例而不使用as。。。在Swift3.x?

中,必须将
init()
作为要求添加到协议定义中 要在
Effect.type类型的数组值上调用它,请执行以下操作:

protocol Effect {
    init()
    func des()
}
然后一切按预期进行:

let array: [Effect.Type] = [ A.self, B.self ]

array[0].init().des() // This is A
array[1].init().des() // This is B

是否要存储类型数组?或者对象的实例?我想存储一个类型数组?然后使用这些类型初始化objectsIt works的实例。但是为什么我必须在协议中添加init()?是Effect.Type无法分析init()方法的原因吗?@pluto:否则编译器怎么知道符合
Effect
的所有类型都有
init()
方法?好的,我明白了
let array: [Effect.Type] = [ A.self, B.self ]

array[0].init().des() // This is A
array[1].init().des() // This is B