假设我有一个协议TestProtocol和符合TestClass1的类TestClass2TestProtocol

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

进一步假设我确实有一个定义为
var testArray: [TestProtocol.Type] = [TestClass1.self, TestClass2.self]

如何根据TestClass1的条目创建TestClass2testArray的实例对象?
注意:这应该在不创建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约束)
你能告诉我它是否适合你吗?如果不是,你需要更新你的工具链。

09-30 21:44