Obtenir dynamiquement le type de AnyObject dans Swift
J'ai passé un paramètre à une fonction de type AnyObject car tout peut être transmis. Est-il un moyen pour obtenir le type de l'Objet passé, de façon dynamique?
source d'informationauteur Rishi | 2014-08-27
Vous devez vous connecter pour publier un commentaire.
Généralement c'est ce que les génériques sont pour. Il y a rarement de bonnes raisons pour avoir un
AnyObject
dans le code qui n'interagissent pas avec l'ObjC. Si vous êtes alors en réalisant différentes actions en fonction du type, alors vous avez probablement fait pour utiliser la surcharge.Cela dit, il y a plusieurs façons d'obtenir l'accès à un type. En général, vous voulez exécuter un code différent selon le type, de sorte que vous pouvez utiliser un
switch
:ou
Ou vous pouvez utiliser un si:
Voir "Type de Casting pour Tout et AnyObject" dans le Langage de Programmation Swift pour plus de discussion.
Mais encore une fois, sauf si vous travaillez avec ObjC code, il y a rarement raison de l'utilisation d'
Any
ouAnyObject
. Les génériques et les surcharges sont les outils conçus pour résoudre ces problèmes en Swift.Il n'est pas clair ce que tu veux dire par "type" dans votre question. Pour toute valeur de n'importe quel type de Swift, vous pouvez obtenir sa dynamique runtime type comme ceci:
Ce que vous pouvez faire avec elle, c'est une autre question.
Swift 3 version avec @jojodmo's conseil:
D'abord importer la Fondation
et si vous voulez pas le type de test1 faire:
Vous obtiendrez "Sstt" Sstt moyenne de la Chaîne.
si vous essayez avec un Int il serait TtSi (i int)