Qual è il modo migliore per verificare se un NSArray contiene un oggetto di un certo tipo di classe? containsObject:
sembra testare l'uguaglianza, mentre sto cercando il controllo di uguaglianza isKindOfClass:
.Come verificare se un NSArray contiene un oggetto di una particolare classe?
risposta
Si potrebbe utilizzare blocchi di enumerazione basato a fare anche questo.
// This will eventually contain the index of the object.
// Initialize it to NSNotFound so you can check the results after the block has run.
__block NSInteger foundIndex = NSNotFound;
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[MyClass class]]) {
foundIndex = idx;
// stop the enumeration
*stop = YES;
}
}];
if (foundIndex != NSNotFound) {
// You've found the first object of that class in the array
}
Se si dispone di più di un oggetto di questo tipo di classe nella propria matrice, si dovrà modificare l'esempio un po ', ma questo dovrebbe darvi un'idea di cosa si può fare.
Un vantaggio di questa enumerazione rapida è che consente anche di restituire l'indice dell'oggetto. Inoltre, se si utilizza enumerateObjectsWithOptions:usingBlock:
, è possibile impostare le opzioni per eseguirne la ricerca simultaneamente, in modo da ottenere gratuitamente l'enumerazione con thread o scegliere se cercare la matrice al contrario.
Le API basate su blocco sono più flessibili. Anche se sembrano nuovi e complicati, sono facili da riprendere una volta che inizi ad usarli - e poi inizi a vedere le opportunità per usarli ovunque.
È possibile utilizzare l'enumerazione veloce per scorrere l'array e verificare per la classe:
BOOL containsClass = NO;
for (id object in array) {
if ([object isKindOfClass:[MyClass class]]) {
containsClass = YES;
break;
}
}
È possibile eseguire questa operazione con un NSPredicate.
NSPredicate *p = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@",
[NSNumber class]];
NSArray *filtered = [identifiers filteredArrayUsingPredicate:p];
NSAssert(filtered.count == identifiers.count,
@"Identifiers can only contain NSNumbers.");
- 1. Come verificare se un oggetto ha un metodo particolare?
- 2. Come posso sapere se un oggetto implementa un metodo particolare?
- 3. verificare se un puntatore punta a una particolare classe C++
- 4. Javascript: Verificare se la pagina contiene un particolare div
- 5. Verificare se una stringa contiene una particolare stringa in Velocity
- 6. Come verificare se una NSString contiene una delle NSStrings in un NSArray?
- 7. Come posso verificare se un elenco contiene un oggetto di un certo tipo? C#
- 8. In Objective C, puoi verificare se un oggetto ha una proprietà o un messaggio particolare?
- 9. come verificare se Lista <T> elemento contiene un elemento con un valore particolare proprietà
- 10. Verificare se un oggetto ha una proprietà
- 11. verifica se un array non contiene un determinato oggetto
- 12. Come verificare se un TR contiene un TD con una specifica classe CSS con jquery?
- 13. Come verificare se una stringa contiene un int? -SWIFT
- 14. In C#, come verificare se una stringa contiene un intero?
- 15. Come verificare se una tupla contiene un elemento in Python?
- 16. Come posso verificare se una variabile contiene un lambda?
- 17. Come verificare se un oggetto non è di un tipo particolare?
- 18. Come verificare se un TextView contiene una determinata stringa
- 19. Come verificare se un oggetto implementa un'interfaccia?
- 20. Verificare se è un oggetto
- 21. Quale metodo per verificare se un NSDictionary contiene una chiave particolare è più veloce?
- 22. Verificare se una lista di stringhe contiene un valore
- 23. come vedo se un grande oggetto JSON contiene un valore?
- 24. python 3: come verificare se un oggetto è una funzione?
- 25. Come posso verificare se un oggetto contiene un array di byte?
- 26. Come verificare se l'elemento contiene attributo di classe specifico
- 27. Come verificare se una classe java ha un metodo particolare in esso?
- 28. Come scrivere un'istruzione switch in jQuery/Javascript per verificare se un elemento ha una classe particolare?
- 29. Come verificare se un oggetto è definito?
- 30. Come verificare se un elenco contiene un elenco secondario
Qual è il vantaggio nell'utilizzo di un metodo basato su blocchi, oltre alla possibilità di specificare una variabile per arrestare l'enumerazione? – futureelite7
Vorrei utilizzare NSNotFound anziché -1. – NSResponder
@NSResponder - Buona cattura - grazie. – Abizern