Voglio scrivere una funzione o una direttiva come NSLog() che accetta qualsiasi tipo di variabile, primitive e oggetti. In quella funzione voglio distinguerli.Objective-C: come verificare se una variabile è un oggetto, una struct o un'altra primitiva
so come funziona per gli oggetti:
- (void)test:(id)object {
if ([object isKindOfClass:[NSString class]])
...
ma come faccio a distinguere gli oggetti da struct o addirittura interi o galleggianti. Qualcosa del tipo:
"isKindOfStruct:CGRect" or "isInt"
per esempio?
È possibile? Ho pensato che dal momento che è possibile inviare tutto a NSLog (@ "...", oggetti, interi, strutture) deve essere possibile?
Grazie per qualsiasi aiuto!
EDIT
Il mio obiettivo finale è quello di attuare una sorta di polimorfismo.
Voglio essere in grado di chiamare la mia funzione:
MY_FUNCTION(int)
MY_FUNCTION(CGRect)
MY_FUNCTION(NSString *)
...
or [self MYFUNCTION:int]...
e in my_function
-(void)MYFUNCTION:(???)value {
if ([value isKindOf:int])
...
else if ([value isKindOf:CGRect])
...
else if ([value isKindOfClass:[NSString class]])
...
}
so che IsKindOf non esiste e non si può nemmeno eseguire tali metodi su primitive . Non sono nemmeno sicuro del "???" tipo generico di "valore" nell'intestazione della funzione.
È possibile?
IsKindOf esiste. isKindOfClass verifica se una classe è un membro o una sottoclasse e isMemberOfClass controlla se una classe è * esattamente * un tipo di classe. https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html –