Verificação dinâmica de tipos por estruturas?
Estou confuso sobre a verificação dinâmica de tipos no Swift.
Especificamente, tenho um caso esquisito em que quero, essencialmente, escrever (ou encontrar) uma função:
func isInstanceOf(obj: Any, type: Any.Type) -> Bool
No Objetivo-C, isso éisKindOfClass
, mas isso não vai funcionar porqueAny.Type
inclui estruturas Swift, que não são classes (muito menosNSObject
subclasses).
Eu não posso usar Swiftis
aqui, porque isso requer um tipo codificado.
Não posso usarobj.dynamicType == type
porque isso ignoraria subclasses.
oLivro rápido parece sugerir que essas informações são perdidas e não estão disponíveis para estruturas:
As classes têm recursos adicionais que as estruturas não:
...
A conversão de tipo permite verificar e interpretar o tipo de uma instância de classe em tempo de execução.(No capítulo Conversão de tipo, ele diz "A conversão de tipo no Swift é implementada com os operadores is e como", portanto, parece ser uma definição mais ampla de "conversão de tipo" do queem outros idiomas.)
No entanto, não pode ser verdade queis
/as
não funciona com estruturas, pois você pode colocar Strings e Ints em um[Any]
e retire-os mais tarde e useis String
ouis Int
para descobrir o que eram. O capítulo Casting de tipos do livro Swift faz exatamente isso!
Existe algo que é tão poderoso quantoisKindOfClass
mas para quaisquer instâncias Swift? Essa informação ainda deve existir em tempo de execução, certo?