2010-02-07 24 views
116

Tengo el siguiente problema: obtengo una instancia de una clase pasada y quiero saber el nombre de la clase de esta instancia. Cómo obtener esto?Obteniendo el nombre de la clase de una instancia

+0

Tal vez reformule su pregunta o acepte la respuesta que coincide con la pregunta? –

+0

@JasperBlues: ¡Hecho, ni siquiera me di cuenta de lo popular que fue esto! – Robin

Respuesta

336

NSStringFromClass([instance class]) deberían hacer el truco.

+28

Upvoted para responder la pregunta para que los googlers puedan obtener una respuesta, en lugar de anticipar la necesidad. – Gleno

+2

Recuerde '# import ' para poder llamar a la clase en una instancia. – Raspu

26

si todo lo que quiere hacer es probar un objeto para ver si se trata de un tipo de una cierta clase

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

Gracias, voy a usar esto :) – Robin

+8

Upvoted para anticipar la necesidad en lugar de responder a la pregunta. –

15

Desde dentro de la propia clase

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

Absolutamente no quiero despertar tu enojo, pero esta fue la segunda respuesta relacionada con iOS en tu perfil. Me parece agregar solo que podemos referirnos a una instancia como "yo" desde su implementación. ¿Defenderías esto como agregar sustancialmente a la respuesta aceptada de tres años? – danh

+0

@danh Veo que me estás cazando. ¡Bien por usted! –

+0

Lo siento, acabo de hacer clic en este, y debatí sobre si decir algo. Solo quería hacer algunas burlas suaves, pero sé que los ánimos se calientan bastante rápido en estos entornos semi-sin rostro. Gracias por ser amable al respecto. (De hecho, +1 para practicar la encapsulación). – danh

0

Si está buscando cómo llegar nombreclase en Swift puedes usar reflect para obtener información sobre el objeto.

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

o simplemente 'self.dynamicType' – jbg

1

Puede también utilizar [[self class] description]

2

Sólo añadir una categoría:

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

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

A continuación, utilice el siguiente código:

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

o incluso:

NSString *className = SomeObject.new.className; 

Para usarlo en cualquier lugar, agregue la categoría al archivo YourProject.pch.

+0

Si se llama a una clase Swift, esto devuelve un nombre de clase namespaced. – Alper

Cuestiones relacionadas