如何在Swift中用它创建类和实例对象的数组?

Ana*_*Ana 7 generics swift

我之前尝试过问这个问题,但没有明确表达我的问题,所以我会在这里再试一次.我也注意到一个非常相似的声音问题,但它要求完全不同的东西.

我有以下代码:

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, B.self, C.self]
for cls in classes {
    let obj = ???
}
Run Code Online (Sandbox Code Playgroud)

我想cls在循环中实例化一个类型的对象并用它做一些事情.我可能在数组中有重复项,如图所示.我应该用什么来代替???能够实例化正确的对象?

R M*_*nke 6

您所需要的只是一种required init创建实例的方法,该实例将在Types您希望其工作的所有内容之间共享.一个protocol保存的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")
    }
}
Run Code Online (Sandbox Code Playgroud)