从元类型数组创建 class 个实例

Create class instances from an array of metatypes

假设我确实有一个协议 TestProtocol 和 类 TestClass1TestClass2 符合 TestProtocol:

protocol TestProtocol: AnyObject { }
class TestClass1: TestProtocol { }
class TestClass2: TestProtocol { }

进一步假设我有一个定义为

的元类型数组
var testArray: [TestProtocol.Type] = [TestClass1.self, TestClass2.self]

如何根据 testArray 的条目创建 TestClass1TestClass2 的实例对象?

p.s.: 这应该在不创建再次检查 TestClass1.selfTestClass2.self like

的开关构造的情况下完成
var instanceArray: [TestProtocol] = []
for element in testArray {
    if element == TestClass1.self {
        instanceArray.append(TestClass1())
    } else if element == TestClass2.self {
        instanceArray.append(TestClass2())
    }
}

我研究了泛型,但没有找到合适的解决方案,因为元类型存储在 [TestProtocol.Type].

类型的数组中

这个有效:

protocol TestProtocol: AnyObject {
    init()
}

final class TestClass1: TestProtocol { }
final class TestClass2: TestProtocol { }

var testArray: [TestProtocol.Type] = [TestClass1.self, TestClass2.self]

for testType in testArray {
    let testInstance = testType.init()
}

final classes 也可以是 structs(但您需要删除 AnyObject 约束)

你能告诉我它是否为你编译了吗?如果没有,您需要更新您的工具链。