2013-12-12 21 views
9

Sto scrivendo del codice che utilizzerà NSMutableArray e memorizzeremo i valori int all'interno di esso, racchiusi all'interno di NSNumbers.iOS come fa NSMutableArray a verificare se contiene oggetti NSNumber?

vorrei confermare che l'interrogazione di un iOS NSArray o NSMutableArray utilizzando nuove NSNumbers con gli stessi valori è legale, di se ho bisogno di iterare esplicitamente sopra la matrice, e verificare se ogni valore int è pari al valore I vuoi provare contro?

Questo sembra funzionare:

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

Cosa intendi per * legale *? Sono abbastanza sicuro che 'containsObject:' iterates sopra l'array ad un certo punto. – dandan78

+1

Hai letto le specifiche per containsObject? "Questo metodo determina se anObject è presente nell'array inviando un messaggio isEqual: a ciascuno degli oggetti dell'array (e passando anObject come parametro a ogni isEqual: message)." –

+0

Invece di NSNumber numberWithint: è possibile utilizzare letterali e utilizzare @ (3) –

risposta

16

Quello che state facendo è bene. Perché non dovrebbe essere?

Il metodo containsObject: esegue effettivamente l'iterazione sull'array e chiama il metodo isEqual: su ciascun oggetto che passa nell'oggetto da verificare.

BTW - non c'è niente di speciale nell'uso di NSNumber. È lo stesso con una matrice di qualsiasi tipo di oggetto. Finché la classe dell'oggetto ha un metodo valido isEqual:, funzionerà.

2

Per il Apple's NSNumber documentation, si dovrebbe usare isEqualToNumber:

isEqualToNumber: Restituisce un valore booleano che indica se il ricevitore e un certo numero sono uguali. - (BOOL) isEqualToNumber: (NSNumber *) aNumber

+0

Ma isEqual funzionerà correttamente. Semplicemente non è così strettamente digitato. –

+0

(NSNumber è conforme a NSObject, dove isEqual è definito). –