I'm writing some code that will be using NSMutableArray and storing int values within it, wrapped within NSNumbers.
I would like to confirm that querying an iOS NSArray or NSMutableArray using new NSNumbers with same values is legal, of if I need to explicitly iterate over the array, and check if each int value is equal to the value I want to test against?
This appears to work:
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
}
What you are doing is fine. Why wouldn't it be?
The containsObject:
method actually iterates over the array and calls the isEqual:
method on each object passing in the object you are checking for.
BTW - there is nothing special here about using NSNumber
. It's the same with an array of any object type. As long as the object's class has a valid isEqual:
method, it will work.
Per the Apple's NSNumber documentation, you should use isEqualToNumber
:
isEqualToNumber: Returns a Boolean value that indicates whether the receiver and a given number are equal. - (BOOL)isEqualToNumber:(NSNumber *)aNumber
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With