¿Cuál es la mejor manera de probar si un NSArray contiene un objeto de un cierto tipo de clase? containsObject:
parece probar la igualdad, mientras que estoy buscando isKindOfClass:
comprobación de igualdad.¿Cómo comprobar si un NSArray contiene un objeto de una clase en particular?
Respuesta
Se puede usar bloques de enumeración basada en hacerlo así.
// 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
}
Si usted tiene más de un objeto de este tipo de clase en su conjunto, tendrá que ajustar un poco el ejemplo, pero esto debe darle una idea de lo que puede hacer.
Una ventaja de esta enumeración más rápida es que también le permite devolver el índice del objeto. Además, si usó enumerateObjectsWithOptions:usingBlock:
, puede establecer opciones para buscar esto al mismo tiempo, por lo que puede obtener la enumeración con subprocesos de forma gratuita o elegir si buscar en la matriz en orden inverso.
Las API basadas en bloques son más flexibles. A pesar de que se ven nuevos y complicados, son fáciles de recoger una vez que comiences a usarlos, y luego comienzas a ver oportunidades para usarlos en todas partes.
Puede utilizar la enumeración rápida para recorrer la matriz y comprobar si la clase:
BOOL containsClass = NO;
for (id object in array) {
if ([object isKindOfClass:[MyClass class]]) {
containsClass = YES;
break;
}
}
Puede hacerlo con 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. Javascript: Comprobar si la página contiene un div en particular
- 2. ¿Cómo comprobar si un NSString contiene uno de los NSStrings en un NSArray?
- 3. comprobar si un std :: vector contiene un determinado objeto?
- 4. ¿Cómo comprobar si una tabla contiene un elemento en Lua?
- 5. ¿Cómo comprobar si un TR contiene un TD con una clase de CSS específica con jquery?
- 6. ¿Cómo puedo verificar si un NSString particular está presente en un NSArray?
- 7. ¿Cómo comprobar si una clase Java tiene un método particular en ella?
- 8. Android: ¿Cómo comprobar si una ruta contiene un punto tocado?
- 9. Cómo comprobar si un objeto es serializable en C#
- 10. ios comprobar si NSArray == null
- 11. Cómo comprobar si un int var contiene un número específico
- 12. ¿Cómo puedo averiguar si un objeto implementa un método en particular?
- 13. ¿Cómo comprobar si existe un directorio que contiene un archivo?
- 14. ¿Cómo comprobar si un objeto implementa una interfaz?
- 15. ¿Cómo comprobar que una matriz contiene un valor particular en Scala 2.8?
- 16. ¿Cómo verifico si un objeto contiene una matriz de bytes?
- 17. ¿Cómo comprobar en MATLAB si un vector solo contiene ceros?
- 18. Comprobar si una Lista ya contiene un elemento o no?
- 19. Usando StreamReader para comprobar si un archivo contiene una cadena
- 20. Compruebe si un objeto es un NSArray o NSDictionary
- 21. Escogiendo un objeto aleatorio en un NSArray
- 22. ¿Cómo puedo comprobar si existe un objeto en C++
- 23. ¿Cómo comprobar si un objeto no es una matriz?
- 24. ¿Cómo comprobar si un parámetro contiene dos subcadenas utilizando Mockito?
- 25. cómo encontrar si args maravilloso contiene una cadena en particular
- 26. ¿Cómo puedo saber si un elemento contiene una clase específica?
- 27. KVO - ¿Cómo comprobar si un objeto es un observador?
- 28. Comprobar si un objeto JSON en particular está disponible o no
- 29. Comprobar si WPF DataRowView contiene una columna
- 30. comprobando si una matriz no contiene un determinado objeto
¿Cuál es la ventaja de utilizar un método basado en bloques, además de poder especificar una variable para detener la enumeración? – futureelite7
Usaría NSNotFound en lugar de -1. – NSResponder
@NSResponder - Buena captura - gracias. – Abizern