2010-08-12 9 views
11

Esiste una funzione analoga a "isKindOfClass:" per confrontare una "Classe" con un'altra (ovvero senza costruire un'istanza di una delle due classi). Ad esempio, dato:Confronto di "Classe" con altra "Classe" in Objective-C

Class class = NSClassFromString(@"NSNumber"); 

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

Grazie!

risposta

21

+ (BOOL)isSubclassOfClass:(Class)aClass

e

Class theClass = NSClassFromString(@"NSNumber"); 

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

Non c'è mai più di 1 istanza di una classe, è per questo che == è l'operatore che stai cercando.

+0

Ciao Georg. Il secondo esempio genera un errore di compilazione "Espressione prevista prima di 'NSNumber'", tuttavia il primo funziona! Sai se è possibile limitare a non includere sottoclassi? Grazie! –

+1

l'istruzione if dovrebbe essere 'if ([NSNumber class] == class)'. Per maggiori informazioni, consultare: http://stackoverflow.com/questions/3107213 –

+0

@ Kevin: risolto questo problema, avrei dovuto verificarlo prima. Scusate. –

5

Sì, si può fare:

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

Questi sono metodi di classe su NSObject.

+0

Grazie Dave. È possibile limitare a non includere sottoclassi? Grazie. –

+0

@Kevin come @Georg sottolinea, puoi fare: '[classe NSNumber] == classe' –

+0

Ah, bello! Grazie Dave! –

Problemi correlati