Devo verificare se l'oggetto è di tipo NSString
o UIImageView
. Come posso realizzare questo? Esiste un tipo di metodo "isoftype"?In Objective-C, come si verifica il tipo di oggetto?
risposta
Se l'oggetto è myObject
, e si desidera verificare se si tratta di un NSString
, il codice sarebbe:
[myObject isKindOfClass:[NSString class]]
Allo stesso modo, se si voleva testare myObject
per un UIImageView
:
[myObject isKindOfClass:[UIImageView class]]
Nota che esiste anche un isMemberOfClass: metodo che controlla la "precisione" della classe. Fai attenzione, però, dato che molti oggetti Apple sono in realtà tipi di Core Foundation travestiti. Ad esempio, una NSString è più spesso una NSCFString e isMemberOfClass: restituirà false per questo confronto.) –
Nota questo metodo è molto lento! – SAKrisT
È giusto sapere che NSString è un cluster di classi? (come NSNumber) – Ricardo
Si sarebbe probabilmente utilizzare
- (BOOL)isKindOfClass:(Class)aClass
Questo è un metodo di NSObject
.
Per ulteriori informazioni, consultare la documentazione NSObject
.
Ecco come lo si utilizza.
BOOL test = [self isKindOfClass:[SomeClass class]];
Si potrebbe anche provare a fare somthing come questo
for(id element in myArray)
{
NSLog(@"=======================================");
NSLog(@"Is of type: %@", [element className]);
NSLog(@"Is of type NSString?: %@", ([[element className] isMemberOfClass:[NSString class]])? @"Yes" : @"No");
NSLog(@"Is a kind of NSString: %@", ([[element classForCoder] isSubclassOfClass:[NSString class]])? @"Yes" : @"No");
}
cos'è questo 'className' Non riesco a farlo funzionare con i miei id –
sì non c'è nulla di simile –
-1: non usare' className', potrebbe non funzionare su OS X, ma non è in iOS e non è pensato per essere usato per questo. Inoltre, quegli 'NSLog' non fanno quello che penso tu intendessi per loro - stanno controllando il nome della classe (sempre una stringa) e la classe coder, stranamente, invece della classe dell'elemento reale. – andyvn22
Esecuzione di un semplice test, ho pensato di documentare che cosa funziona e cosa no. Spesso vedo persone che controllano se la classe dell'oggetto è membro dell'altra classe o uguale all'altra classe.
Per la riga di seguito, abbiamo alcuni dati mal formati che possono essere un NSArray
, uno NSDictionary
o (null)
.
NSArray *hits = [[[myXML objectForKey: @"Answer"] objectForKey: @"hits"] objectForKey: @"Hit"];
Queste sono le prove che sono state eseguite:
NSLog(@"%@", [hits class]);
if ([hits isMemberOfClass:[NSMutableArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSMutableDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSMutableDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSMutableArray class]]) {
NSLog(@"%@", [hits class]);
}
isKindOfClass
ha funzionato piuttosto bene, mentre isMemberOfClass
no.
Quando si desidera differire da una superclasse ed l'inheritedClass è possibile utilizzare:
if([myTestClass class] == [myInheritedClass class]){
NSLog(@"I'm the inheritedClass);
}
if([myTestClass class] == [mySuperClass class]){
NSLog(@"I'm the superClass);
}
Utilizzando - (BOOL)isKindOfClass:(Class)aClass
in questo caso si tradurrebbe in VERO entrambe le volte perché l'inheritedClass è anche una sorta di superclasse.
'isMemberOfClass:' restituirà 'NO' quando si ha a che fare con sottoclassi. – mipadi
È possibile utilizzare il seguente codice in caso si desideri verificare i tipi di tipi di dati primitivi.
// Returns 0 if the object type is equal to double
strcmp([myNumber objCType], @encode(double))
Semplice, [classe yourobject] restituirà il nome classe di yourobject.
In realtà restituirà un oggetto 'Class'. Tuttavia, la 'description' di questo oggetto sarà il nome della classe come una stringa, quindi è possibile quindi registrarlo sulla console. – devios1
- 1. Verifica il tipo derivato (C++)
- 2. In Java, come si imposta un tipo di ritorno se si verifica un'eccezione?
- 3. Verifica il tipo di errore personalizzato
- 4. Implementare protocollo ObjectiveC in rapida
- 5. oggetto! = Verifica nulla
- 6. Come dividere newline da NSString in ObjectiveC
- 7. Objective-C: conta il numero di volte in cui un oggetto si verifica in una matrice?
- 8. Come implementare il bridging senza pedaggio in ObjectiveC/C?
- 9. covariante tipo T si verifica in posizione invariante
- 10. Dato che un oggetto è una matrice di qualsiasi tipo, come si verifica che sia vuoto in Java?
- 11. Come controllare il tipo di un oggetto in C++/CLI?
- 12. MSOFFICE tipo MIME verifica
- 13. C#: come si verifica il metodo IEnumerable.GetEnumerator()?
- 14. ObjectiveC blocca l'equivalente Java
- 15. ES6 chiave oggetto stenografia verifica
- 16. Come si verifica se un oggetto esiste in corrispondenza di un determinato indice di un NSMutableArray?
- 17. Come confrontare il tipo di un oggetto in Python?
- 18. Come inserire il tipo di oggetto in ListView?
- 19. Come ottenere il tipo di un oggetto dinamico in C#?
- 20. Posso inserire un ObjectiveC @selector in un NSDictionary?
- 21. come lanciare in modo dinamico un oggetto di tipo stringa in un oggetto di tipo T
- 22. Il null ha il tipo di oggetto?
- 23. Come si verifica/verifica la versione di Kivy?
- 24. Come si verifica il conteggio dei riferimenti in modalità ARC?
- 25. Come aggiornare il campo tipo oggetto doctrine
- 26. Come si verifica una variabile di tipo generico per l'uguaglianza con Default (T) in Delphi?
- 27. Come si passa il valore di un tempo di tipo di input a un oggetto Date?
- 28. Mockito verifica il ritorno di un metodo oggetto spiato
- 29. Controllare il tipo di oggetto ios swift
- 30. Quando si crea un ArrayList senza specificare il tipo di oggetto, lo crea automaticamente quando si aggiunge il primo oggetto?
Vedere: [In Objective-C qual è l'elemento equivalente della parola chiave "instanceof" java?] (Http://stackoverflow.com/questions/536396/in-objective-c-what-is-the-equivelant- of-the-java-instanceof-keyword) – Reunanen
Sì, c'è: '[object isKindOfClass: [ClassName class]]' –