web-dev-qa-db-fra.com

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

J'ai le problème suivant: une instance d'une classe est transmise et je souhaite connaître le nom de la classe de cette instance. Comment obtenir ceci?

128
Robin

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

364
CiNN

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

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

De la classe même

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

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.

2
ealee

Vous pouvez également utiliser [[self class] description]

1
Jeremie

OBJC:

NSStringFromClass([instance class])

Rapide

Par exemple:

String(describing: YourType.self)

De type:

String(describing: self)
1
Lal Krishna

Si vous cherchez comment obtenir le nom de la 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)
}
0
Roman Barzyczak