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

How to use AnyClass to init an specific class instance in swift3.x

I have seen this question on Whosebug Here Unfortunately, this answer is not helpful in 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() { }
}

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

var array = [Effect.Type]()
array.append(A.self)
array.append(B.self)

当我想从数组中得到class 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

Error Image

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

let a = array[0] as! A.Type
a.init().des() -> This is class A

但是如果我不确切地知道 class,我就无法通过 Effect.Type 初始化 class 那么如何使用 AnyClass 来初始化特定的 class 实例而不使用 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