假设我有一个协议TestProtocol
和符合TestClass1
的类TestClass2
和TestProtocol
:
protocol TestProtocol: AnyObject { }
class TestClass1: TestProtocol { }
class TestClass2: TestProtocol { }
进一步假设我确实有一个定义为
var testArray: [TestProtocol.Type] = [TestClass1.self, TestClass2.self]
如何根据
TestClass1
的条目创建TestClass2
和testArray
的实例对象?注意:这应该在不创建switch结构的情况下完成,该结构会像
var instanceArray: [TestProtocol] = []
for element in testArray {
if element == TestClass1.self {
instanceArray.append(TestClass1())
} else if element == TestClass2.self {
instanceArray.append(TestClass2())
}
}
我研究了泛型,但没有找到合适的解决方案,因为元类型存储在
TestClass1.self
类型的数组中。 最佳答案
这是有效的:
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
约束)你能告诉我它是否适合你吗?如果不是,你需要更新你的工具链。