从元类型数组创建类实例

时间:2018-12-18 20:23:49

标签: swift polymorphism protocols metatype

假设我确实有一个符合input_shape=(timesteps,dim)的协议TestProtocol和类TestClass1TestClass2

TestProtocol

进一步假设我确实有一个像这样定义的元类型数组

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

如何基于var testArray: [TestProtocol.Type] = [TestClass1.self, TestClass2.self] 的条目创建TestClass1TestClass2的实例对象?

p.s .:应该在没有创建像{p>一样再次检查testArrayTestClass1.self的开关结构的情况下完成此操作

TestClass2.self

我研究了泛型,但是没有找到合适的解决方案,因为元类型存储在var instanceArray: [TestProtocol] = [] for element in testArray { if element == TestClass1.self { instanceArray.append(TestClass1()) } else if element == TestClass2.self { instanceArray.append(TestClass2()) } } 类型的数组中。

1 个答案:

答案 0 :(得分:3)

这有效:

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约束)

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