2010-08-12 23 views
11

Existe una función comparable a 'isKindOfClass:' para comparar una 'Clase' a otra (es decir, sin construir una instancia de ninguna clase). Por ejemplo, dado:Comparación de 'Clase' con otra 'Clase' en Objective-C

Class class = NSClassFromString(@"NSNumber"); 

[NSNumber isKindOfClass:class]; // YES 
[NSString isKindOfClass:class]; // NO 

Gracias!

Respuesta

21

+ (BOOL)isSubclassOfClass:(Class)aClass

y

Class theClass = NSClassFromString(@"NSNumber"); 

if ([NSNumber class] == theClass) { 
    // YES 
} 

Nunca hay más de 1 instancia de una clase, por eso == es el operador que está buscando.

+0

Hola Georg. El segundo ejemplo da como resultado un error de compilación "Expectativa esperada antes de 'NSNumber'", sin embargo, el primero funciona. ¿Sabes si es posible limitar el no incluir subclases? ¡Gracias! –

+1

la instrucción if debe ser 'if ([NSNumber class] == class)'. Para obtener más información, consulte: http://stackoverflow.com/questions/3107213 –

+0

@Kevin: solucionado eso, debería haberlo comprobado antes. Lo siento. –

5

Sí, puede hacerlo:

[NSNumber isSubclassOfClass:class]; //YES 
[NSString isSubclassOfClass:class]; //NO 

Estos son los métodos de clase en NSObject.

+0

Gracias Dave. ¿Es posible limitar el no incluir subclases? Gracias. –

+0

@Kevin como señala @Georg, puede hacer: '[NSNumber class] == class' –

+0

¡Ah, genial! Gracias Dave! –

Cuestiones relacionadas