Se vuoi creare un array di numeri interi, puoi usare NSInteger? Devi usare NSNumber? Se è così, allora perché?
Se vuoi creare un array di numeri interi, puoi usare NSInteger? Devi usare NSNumber? Se è così, allora perché?
Risposte:
Puoi usare un semplice vecchio array C:
NSInteger myIntegers[40];
for (NSInteger i = 0; i < 40; i++)
myIntegers[i] = i;
// to get one of them
NSLog (@"The 4th integer is: %d", myIntegers[3]);
Oppure puoi usare NSArrayo NSMutableArray, ma qui dovrai racchiudere ogni numero intero all'interno di NSNumberun'istanza (perché gli NSArrayoggetti sono progettati per contenere istanze di classe).
NSMutableArray *myIntegers = [NSMutableArray array];
for (NSInteger i = 0; i < 40; i++)
[myIntegers addObject:[NSNumber numberWithInteger:i]];
// to get one of them
NSLog (@"The 4th integer is: %@", [myIntegers objectAtIndex:3]);
// or
NSLog (@"The 4th integer is: %d", [[myIntegers objectAtIndex:3] integerValue]);
NSArray, sono sicuro che non sentirai il colpo di prestazioni.
Matrice C:
NSInteger array[6] = {1, 2, 3, 4, 5, 6};
Objective-C Array:
NSArray *array = @[@1, @2, @3, @4, @5, @6];
// numeric values must in that case be wrapped into NSNumbers
Swift Array:
var array = [1, 2, 3, 4, 5, 6]
Anche questo è corretto:
var array = Array(1...10)
NB: gli array sono fortemente tipizzati in Swift; in tal caso, il compilatore deduce dal contenuto che l'array è un array di numeri interi. Puoi anche usare questa sintassi di tipo esplicito:
var array: [Int] = [1, 2, 3, 4, 5, 6]
Se volessi un array di doppi, useresti:
var array = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] // implicit type-inference
o:
var array: [Double] = [1, 2, 3, 4, 5, 6] // explicit type
Se vuoi usare un NSArray, hai bisogno di una classe Objective-C per inserirlo, da qui il requisito NSNumber.
Detto questo, Obj-C è ancora C, quindi puoi usare normali array C e mantenere int regolari invece di NSNumbers se necessario.
Puoi usare CFArray invece di NSArray. Ecco un articolo che spiega come.
CFMutableArrayRef ar = CFArrayCreateMutable(NULL, 0, NULL);
for (NSUInteger i = 0; i < 1000; i++)
{
CFArrayAppendValue(ar, (void*)i);
}
CFRelease(ar); /* Releasing the array */
Lo stesso vale anche per la versione CoreFoundation degli altri contenitori.
Ho creato un semplice wrapper Objective C attorno al buon vecchio array C da utilizzare in modo più conveniente: https://gist.github.com/4705733
Se l'ordine dei tuoi numeri interi non è richiesto e se ci sono solo valori univoci
puoi anche usare NSIndexSet o NSMutableIndexSet Sarai in grado di aggiungere e rimuovere facilmente interi, o controllare se il tuo array contiene un numero intero con
- (void)addIndex:(NSUInteger)index
- (void)removeIndex:(NSUInteger)index
- (BOOL)containsIndexes:(NSIndexSet *)indexSet
Controlla la documentazione per maggiori informazioni.
NSSet(e usando numeri interi racchiusi in un NSNumber)?
Penso che sia molto più facile usare NSNumbers. Questo è tutto ciò che devi fare:
NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1];
NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2];
.
.
.
NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];
foro solo un altro array per i numeri, e poi arrayWithArray.