Obtener el nombre de la clase de una instancia


142

Tengo el siguiente problema: me pasa una instancia de una clase y quiero saber el nombre de la clase de esta instancia. ¿Cómo conseguir esto?


¿Quizás reformule su pregunta o acepte la respuesta que coincide con la pregunta?
Jasper Blues

@JasperBlues: Hecho, ¡ni siquiera me di cuenta de cuán popular se volvió esto!
Robin

Respuestas:


396

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


33
Votado por responder la pregunta para que los googlers puedan obtener una respuesta, en lugar de anticipar la necesidad.
Gleno

2
Recuerde #import <objc/objc-runtime.h>poder llamar a la clase en una instancia.
JP Illanes

28

si todo lo que quieres hacer es probar un objeto para ver si es un tipo de cierta clase

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

18

Desde dentro de la clase misma

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

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

@danh, veo que me estás persiguiendo. ¡Bien por usted!
Katedral Pillon

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

2
Esto no agrega nada a la respuesta, excepto problemas.
Nikolai Ruhe

1
En caso de que este método de una clase
Bhumit Muchhadia

2

Solo agrega una categoría:

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

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

Luego use 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.


Si se llama en una clase Swift, esto devuelve un nombre de clase con espacio de nombres.
Alper


1

OBJC:

NSStringFromClass([instance class])

RÁPIDO

De instancia:

String(describing: YourType.self)

De tipo:

String(describing: self)

0

Si está buscando cómo obtener classname en Swift, puede usar reflect para obtener información sobre el objeto.

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

o simplementeself.dynamicType
jbg
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.