实例化存储在metatype字典中的类

我已经按照制作一个Swift字典的关键是“types”的解决scheme? 创build可以使用类types作为键的字典。 我想要做的是:我有一个字典,应该存储类types与他们的类types(又名元types)作为键:

class MyScenario { static var metatype:Metatype<MyScenario> { return Metatype(self) } } var scenarioClasses:[Metatype<MyScenario>: MyScenario.Type] = [:] 

然后我有方法来注册和执行scheme:

 public func registerScenario(scenarioID:MyScenario.Type) { if (scenarioClasses[scenarioID.metatype] == nil) { scenarioClasses[scenarioID.metatype] = scenarioID } } public func executeScenario(scenarioID:MyScenario.Type) { if let scenarioClass = scenarioClasses[scenarioID.metatype] { let scenario = scenarioClass() } } 

问题是在最后一行:

使用元types值构造类types为“MyScenario”的对象必须使用“必需的”初始值设定项。

看起来编译器很困惑,因为我不能在这个任务中使用'required'。 有没有人有一个想法,我将不得不在executeScenario()实例化scenarioClass

这必须完成这项工作。

 import Foundation struct Metatype<T> : Hashable { static func ==(lhs: Metatype, rhs: Metatype) -> Bool { return lhs.base == rhs.base } let base: T.Type init(_ base: T.Type) { self.base = base } var hashValue: Int { return ObjectIdentifier(base).hashValue } } public class MyScenario { var p: String public required init() { self.p = "any" } static var metatype:Metatype<MyScenario> { return Metatype(self) } } var scenarioClasses:[Metatype<MyScenario>: MyScenario.Type] = [:] public func registerScenario(scenarioID:MyScenario.Type) { if (scenarioClasses[scenarioID.metatype] == nil) { scenarioClasses[scenarioID.metatype] = scenarioID } } public func executeScenario(scenarioID:MyScenario.Type) { if let scenarioClass = scenarioClasses[scenarioID.metatype] { let scenario = scenarioClass.init() print("\(scenario.p)") } } // Register a new scenario registerScenario(scenarioID: MyScenario.self) // Execute executeScenario(scenarioID: MyScenario.self) // Should print "any"