Como armazeno um valor do tipo Classe <ClassImplementingProtocol> em um Dicionário do tipo [String: Class <Protocol>] no Swift?
Eu quero armazenar um tipo mais especializado em um dicionário do tipo [String: SomeClass]. Aqui está um código de exemplo que ilustra meu problema (também disponível para jogar emhttps://swiftlang.ng.bluemix.net/#/repl/579756cf9966ba6275fc794a):
class Thing<T> {}
protocol Flavor {}
class Vanilla: Flavor {}
var dict = [String:Thing<Flavor>]()
dict["foo"] = Thing<Vanilla>()
Produz o erroERROR at line 9, col 28: cannot assign value of type 'Thing<Vanilla>' to type 'Thing<Any>?'
.
Eu tentei lançarThing<Vanilla>() as Thing<Flavor>
mas isso produz o errocannot convert value of type 'Thing<Vanilla>' to type 'Thing<Flavor>' in coercion
.
Eu também tentei definir o dicionário como tipo[String:Thing<Any>]
mas isso também não muda nada.
Como crio uma coleção de diferentesThing
s sem recorrer à planície[String:AnyObject]
?
Também devo mencionar que a turmaThing
não é definido por mim (na verdade, é sobre BoltsSwiftTask
s), então a solução para criar uma classe base deThing
sem um parâmetro de tipo não funciona.