我在stackoverflow上看到过这个问题Here不幸的是,这个答案在swift3.x中没有帮助
protocol Effect {
func des()
}
class A: Effect {
func des() {
print("This is A")
}
required init() { }
}
class B: Effect {
func des() {
print("This is B")
}
required init() { }
}
我想存储A级和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来初始化一个特定的类实例而不用作! ...在Swift3.x中?
答案 0 :(得分:2)
您必须将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