Hacer una matriz de integers en iOS

Si desea hacer una matriz de integers, ¿puede usar NSInteger? ¿Tiene que usar NSNumber? Si es así, ¿por qué?

Puede usar una matriz simple de 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]); 

O bien, puede usar un NSArray o NSMutableArray , pero aquí tendrá que NSNumber cada integer dentro de una instancia NSNumber (porque los objects NSArray están diseñados para contener instancias de class).

 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]); 

C array:

 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] 

Esto también es correcto:

 var array = Array(1...10) 

Nota: las matrices se escriben con fuerza en Swift; en ese caso, el comstackdor infiere del contenido que la matriz es una matriz de integers. También podría usar esta syntax de tipo explícito:

 var array: [Int] = [1, 2, 3, 4, 5, 6] 

Si quisieras una variedad de Dobles, usarías:

 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 

Si desea utilizar un NSArray, necesita una class Objective-C para poner en él, de ahí el requisito NSNumber.

Dicho esto, Obj-C sigue siendo C, por lo que puede usar matrices C regulares y mantener ints regulares en lugar de NSNumbers si lo necesita.

Puede usar CFArray en lugar de NSArray. Aquí hay un artículo que explica cómo.

 CFMutableArrayRef ar = CFArrayCreateMutable(NULL, 0, NULL); for (NSUInteger i = 0; i < 1000; i++) { CFArrayAppendValue(ar, (void*)i); } CFRelease(ar); /* Releasing the array */ 

Lo mismo aplica para la versión CoreFoundation de los otros contenedores también.

Creé un envoltorio simple Objective C alnetworkingedor de la buena matriz C antigua para ser utilizada más convenientemente: https://gist.github.com/4705733

Si no se requiere el order de sus integers y si solo hay valores únicos

también puede usar NSIndexSet o NSMutableIndexSet. Podrá agregar y eliminar numbers integers fácilmente, o verificar si su matriz contiene un número integer con

 - (void)addIndex:(NSUInteger)index - (void)removeIndex:(NSUInteger)index - (BOOL)containsIndexes:(NSIndexSet *)indexSet 

Consulte la documentation para get más información.

Creo que es mucho más fácil usar NSNumbers. Todo esto que debes hacer:

 NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1]; NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2]; . . . NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];