objective - iOS ¿cómo comprueba NSMutableArray si contiene objetos NSNumber?
nspredicate objective c (2)
Estoy escribiendo un código que usará NSMutableArray y que almacenará los valores int dentro de él, incluido en NSNumbers.
Me gustaría confirmar que consultar un NSArray de iOS o NSMutableArray usando NSNumbers nuevos con los mismos valores es legal , de si necesito iterar explícitamente sobre el arreglo, y verificar si cada valor int es igual al valor con el que quiero probar.
Esto parece funcionar:
NSMutableArray* walkableTiles = [NSMutableArray array];
[walkableTiles addObject:@(1)];
[walkableTiles addObject:@(2)];
[walkableTiles addObject:@(3)];
if([walkableTiles containsObject:@(1)])
{
DLog(@"contains 1"); //test passes
}
if([walkableTiles containsObject:[NSNumber numberWithFloat:2.0]])
{
DLog(@"contains 2");//test passes
}
if([walkableTiles containsObject:[NSNumber numberWithInt:3]])
{
DLog(@"contains 3");//test passes
}
Lo que estás haciendo está bien. ¿Por qué no sería?
El método containsObject:
realidad itera sobre la matriz y llama al método isEqual:
en cada objeto que pasa en el objeto que está buscando.
Por cierto, aquí no hay nada especial acerca de usar NSNumber
. Es lo mismo con una matriz de cualquier tipo de objeto. Siempre que la clase del objeto tenga un método isEqual:
válido, funcionará.
Según la documentación de NSNumber de Apple , debe usar isEqualToNumber
:
isEqualToNumber: devuelve un valor booleano que indica si el receptor y un número determinado son iguales. - (BOOL) isEqualToNumber: (NSNumber *) aNumber