Создать словарь со значениями, которые наследуются от суперкласса - PullRequest
0 голосов
/ 28 мая 2019

У меня есть несколько классов, унаследованных от одного класса, возможно ли создать карту словаря для них? Так что я могу сослаться на правильный класс по строковому ключу.

let map = [String: EngineView] = [
  "google": GoogleView,
  "duckduckgo": DuckDuckGoView
]

GoogleView и DuckDuckGoView оба подкласса EngineView, но XCode жалуется:

"Невозможно преобразовать значение типа 'GoogleView.Type' в ожидаемое значение словарного типа 'EngineView'"

1 Ответ

0 голосов
/ 28 мая 2019

Предполагая, что GoogleView и DuckDuckGoView наследуются от EngineView, вы можете сделать что-то вроде этого:

let map = [String: EngineView.Type] = [
  "google": GoogleView.self,
  "duckduckgo": DuckDuckGoView.self
]

Использование

if let aClass = map["google"] {
    let instance = aClass.init()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...