2013-10-09 5 views
5

Gente, sto provando a fare quanto segue. Ho un array (NSArray) chiamato 'specialLevels', tale matrice assomiglia a questo:Objective-C controlla se la matrice con ints contiene int

specialLevels = @[@2, @4, @6, @9]; 

Questo dovrebbe essere un array di int di. Ho anche ottenuto l'int 'currentLevel' (basic int senza oggetto).

E voglio controllare se currentLevel è in de array of specialLevels. So che il metodo 'containsObject' esiste, ma questo non funzionerà nel mio caso.

Cosa consiglieresti di fare in questo caso?

Così ho pensato che questo, ma ci si sente un po 'strano imo:

if ([specialLevels containsObject:[NSNumber numberWithInt:currentLevel]]) { 
// other code in here 
} 
+8

Qual è il tuo problema? Non ti piace la riga di codice? – Wain

risposta

11

specialLevels non è un array di ints. È una matrice di oggetti NSNumber. @ 2, @ 4, @ 6, @ 8 ciascuno crea un'istanza NSNumber equivalente a chiamare [[NSNumber numberWithInt: value]. Quando chiami containsObject devi anche passare un oggetto NSNumber in modo che containsObject possa corrispondere al valore (usando isEqual :).

È possibile leggere circa Objective-C literals here.

+0

Grazie per questa spiegazione! :) – ronnyrr

16

Si potrebbe in alternativa scrivere:

if ([specialLevels containsObject:@(currentLevel)]) { 
    // other code in here 
} 

che è più in linea con lo stile del vostro altro codice.

+0

Fantastico, davvero grazie! Ma come è valida questa documentazione? – ronnyrr

+2

Hai capito cosa stava facendo '@ 2' prima di iniziare a usarlo? La risposta di @BrianWalker è una buona panoramica. – Wain

+0

No, non l'ho fatto, ma ora lo so, grazie per questa spiegazione! Chiaro per me ora :) – ronnyrr