2013-12-12 22 views
9

Piszę kod, który będzie używać NSMutableArray i przechowywania wartości int w nim, opakowane w NSNumbers.iOS jak NSMutableArray sprawdza, czy zawiera obiekty NSNumber?

Chciałbym potwierdzić, że odpytywanie IOS NSArray lub NSMutableArray użyciu nowych NSNumbers z samymi wartościami jest legalne, z, jeśli muszę wyraźnie iteracyjne nad tablicy i sprawdzić, czy każda wartość int jest równa wartości I chcesz przetestować przeciwko?

To wydaje się działać:

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 
} 
+0

Co masz na myśli przez * legal *? Jestem całkiem pewien, że 'containsObject:' iteruje po tablicy w pewnym momencie. – dandan78

+1

Czy przeczytałeś specyfikację dla containsObject? "Ta metoda określa, czy obiekt anObject jest obecny w tablicy, wysyłając komunikat isEqual: do każdego z obiektów tablicy (i przekazując anObject jako parametr do każdego komunikatu isEqual:)." –

+0

Zamiast numeru NSNumberWithint: możesz używać literałów i używać @ (3) –

Odpowiedz

16

Co robisz jest w porządku. Dlaczego by tak nie było?

Metoda faktycznie wykonuje iteracje na macierzy i wywołuje metodę isEqual: dla każdego obiektu przechodzącego przez obiekt, który jest sprawdzany.

BTW - tutaj nie ma nic szczególnego o używaniu NSNumber. Tak samo jest z tablicą dowolnego typu obiektu. Dopóki klasa obiektu ma prawidłową metodę isEqual:, będzie działać.

2

Per na Apple's NSNumber documentation, należy użyć isEqualToNumber:

isEqualToNumber: Zwraca wartość logiczną wskazującą, czy odbiornik i dana liczba jest równa. - (BOOL) isEqualToNumber: (NSNumber *) aNumer

+0

Ale isEqual będzie działał dobrze. Po prostu nie jest tak ściśle napisane. –

+0

(NSNumber jest zgodny z NSObject, gdzie zdefiniowano isEqual.) –