Как сохранить значение типа Class <ClassImplementingProtocol> в словаре типа [String: Class <Protocol>] в Swift?
Я хочу хранить более специализированный тип в словаре типа [String: SomeClass]. Вот пример кода, иллюстрирующего мою проблему (также доступен для игры наhttps://swiftlang.ng.bluemix.net/#/repl/579756cf9966ba6275fc794a):
class Thing<T> {}
protocol Flavor {}
class Vanilla: Flavor {}
var dict = [String:Thing<Flavor>]()
dict["foo"] = Thing<Vanilla>()
Выдает ошибкуERROR at line 9, col 28: cannot assign value of type 'Thing<Vanilla>' to type 'Thing<Any>?'
.
Я пробовал кастингThing<Vanilla>() as Thing<Flavor>
но это выдает ошибкуcannot convert value of type 'Thing<Vanilla>' to type 'Thing<Flavor>' in coercion
.
Я также попытался определить словарь как тип[String:Thing<Any>]
но это тоже ничего не меняет.
Как мне создать коллекцию разныхThing
с не прибегая к равнине[String:AnyObject]
?
Я должен также упомянуть, что классThing
не определен мной (на самом деле речь идет о BoltsSwiftTask
s), поэтому решение для создания базового классаThing
без параметра типа не работает.