Obtenir le nom de la classe à partir d'une instance


142

J'ai le problème suivant: je reçois une instance d'une classe passée et je veux connaître le nom de la classe de cette instance. Comment obtenir ceci?


Peut-être reformuler votre question ou accepter la réponse qui correspond à la question?
— Jasper Blues

@JasperBlues: C'est fait, je n'ai même pas réalisé à quel point cela était populaire!
— Robin

Réponses:


396

NSStringFromClass([instance class]) devrait faire l'affaire.


33
J'ai voté pour avoir répondu à la question afin que les googleurs puissent obtenir une réponse, au lieu d'anticiper le besoin.
— Gleno

2
N'oubliez pas #import <objc/objc-runtime.h>de pouvoir appeler la classe sur une instance.
— JP Illanes

28

si tout ce que vous voulez faire est de tester un objet pour voir s'il s'agit d'un type d'une certaine classe

BOOL test = [self isKindOfClass:[SomeClass class]];

18

De l'intérieur de la classe elle-même

-(NSString *) className
{
    return NSStringFromClass([self class]);
}

2
Je ne veux absolument pas éveiller votre colère, mais c'était la deuxième réponse liée à iOS dans votre profil. Il me semble seulement ajouter que nous pouvons désigner une instance comme "self" à partir de sa mise en œuvre. Pourriez-vous défendre cela comme un ajout substantiel à la réponse acceptée il y a trois ans?
— danh le

@danh je vois que vous me traquez. Bien pour vous!
— Katedral Pillon

Désolé, j'ai juste cliqué sur celui-ci et j'ai débattu de l'opportunité de dire quelque chose. Je voulais juste faire des nervures douces, mais je sais que les esprits chauffent assez rapidement dans ces environnements semi-sans visage. Merci d'être de bonne humeur à ce sujet. (En fait, +1 pour pratiquer l'encapsulation).
— danh le

2
Cela n'ajoute rien à la réponse, sauf des ennuis.
— Nikolai Ruhe

1
Devrait en faire une méthode de classe
— Bhumit Muchhadia

2

Ajoutez simplement une catégorie:

NSObject+Extensions.h
- (NSString *)className;

NSObject+Extensions.m
- (NSString *)className {
    return NSStringFromClass(self.class);
}

Ensuite, utilisez le code suivant:

NSString *className = [[SomeObject new] className];

ou même:

NSString *className = SomeObject.new.className;

Pour l'utiliser n'importe où, ajoutez la catégorie au fichier YourProject.pch.


Si elle est appelée sur une classe Swift, elle renvoie un nom de classe avec un espace de noms.
— Alper


1

OBJC:

NSStringFromClass([instance class])

RAPIDE

De l'instance:

String(describing: YourType.self)

Du type:

String(describing: self)

0

Si vous cherchez comment obtenir le nom de classe dans Swift, vous pouvez utiliser Reflect pour obtenir des informations sur l'objet.

let tokens = split(reflect(self).summary, { $0 == "." })
if let typeName = tokens.last {
    println(typeName)
}

ou justeself.dynamicType
— jbg
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.