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

时间:2017-08-15 07:57:47

标签: swift init

  

我在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

Error Image

我知道我可以使用此方法来初始化A类

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

但是如果我不完全了解该类,我就无法通过Effect.Type初始化该类 那么如何使用AnyClass来初始化一个特定的类实例而不用作! ...在Swift3.x中?

1 个答案:

答案 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