Por que um dicionário do tipo não [String: Encodable]()
consegue converter para Codificável?
let dictionary = [String: Encodable]()
let test = dictionary is Encodable //Returns false
Mas um dicionário de [String: String]()
funciona
let dictionaryTwo = [String: String]()
let test = dictionaryTwo is Encodable //Returns true
A conformidade condicional de
Dictionary
toEncodable
é a seguinte:Em inglês, isso significa que a
Dictionary
éEncodable
quando seus tiposKey
e são cada um dos tipos que estão em conformidade com .Value
Encodable
No entanto,
[String: Encodable]
(também escrito[String: any Encodable]
) não é esse tipo, porqueany Encodable
não é em si um tipo que pode se conformarEncodable
- é uma maneira de soletrar uma restrição em um tipo, em vez de um tipo em si.Para obter mais informações, consulte outras questões como Protocolo não está de acordo com ele mesmo?
Encodable
é um protocolo, e os protocolos não se conformam a si mesmos. Essa é a primeira questão. Olhando para isso em um nível mais tangível, a questão é que só porque um grupo de objetos éEncodable
não significa que eles podem ser codificados da mesma maneira.[String:String]
fornece informações suficientes para que, como a chave e o valor sejamEncodable
, o dicionário seja. Aqui está um exemplo que mostra por que[String:Encodable]()
não pode se conformar.Suponha que eu tenha
Foo
eBar
:Agora tenho meu dicionário:
Temos um dicionário com chaves e valores que são todos
Encodable
. Se você der uma olhada, porém,dictionary["fooExample"]
edictionary["barExample"]
codificar de forma completamente diferente. Portanto, mesmo que os valores possam ser codificados individualmente , isso não significa que o dicionário com esses valores possa ser codificado.