Как я могу определить переменную, может будет содержать тип универсального протокола в Swift? - PullRequest
0 голосов
/ 04 февраля 2019

Я хочу создать метод, который принимает тип класса, который реализует общий протокол, а затем сохраняет это значение в переменной, чтобы позже я мог создавать экземпляры.

Пример с неуниверсальным протоколом

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)
}

Кажется, я не могу определить тип, который будет содержать мета-тип универсального протокола.Техника стирания типов работает для экземпляров, и, как следует из названия, она стирает информацию о типах, которая мне нужна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...