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.