Я хочу создать метод, который принимает тип класса, который реализует общий протокол, а затем сохраняет это значение в переменной, чтобы позже я мог создавать экземпляры.
Пример с неуниверсальным протоколом
protocol Initializable { init() }
class Impl: Initializable { required init(){} }
//Here we will hold the type of a class that implements Initializable
var initializableType: Initializable.Type? = nil
//This method will get the type of a class that implements Initializable and store it to initializableType.
func register<T>(implementation: T.Type) where T : Initializable {
initializableType = implementation.self
}
//Register the type
register(implementation: Impl.self)
//Then create instance
initializableType?.init()
Теперь, как я могу сделать то же самое для следующего протокола?
protocol GenericInitializable {
associatedtype InitDataType
init(_ with: InitDataType)
}
Кажется, я не могу определить тип, который будет содержать мета-тип универсального протокола.Техника стирания типов работает для экземпляров, и, как следует из названия, она стирает информацию о типах, которая мне нужна.