Если вы хотите создать массив целых чисел, можете ли вы использовать NSInteger? Нужно ли использовать NSNumber? Если да, то почему?
Создание массива целых чисел в iOS
Ответ 1
Вы можете использовать простой старый массив 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]);
Или вы можете использовать NSArray
или NSMutableArray
, но здесь вам нужно будет обернуть каждое целое число внутри экземпляра NSNumber
(поскольку объекты NSArray
предназначены для хранения экземпляров класса).
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]);
Ответ 2
C массив:
NSInteger array[6] = {1, 2, 3, 4, 5, 6};
Objective-C Массив:
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]
Это тоже верно:
var array = Array(1...10)
NB: массивы строго типизированы в Swift; в этом случае компилятор выводит из содержимого, что массив представляет собой массив целых чисел. Вы также можете использовать этот синтаксис явного типа:
var array: [Int] = [1, 2, 3, 4, 5, 6]
Если вам нужен массив парных разрядов, вы должны использовать:
var array = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] // implicit type-inference
или
var array: [Double] = [1, 2, 3, 4, 5, 6] // explicit type
Ответ 3
Если вы хотите использовать NSArray, вам понадобится класс Objective-C, чтобы вставить его - следовательно, требование NSNumber.
Тем не менее, Obj-C по-прежнему C, поэтому вы можете использовать обычные C-массивы и использовать регулярные ints вместо NSNumbers, если вам нужно.
Ответ 4
Вы можете использовать CFArray вместо NSArray. Здесь - статья, объясняющая, как.
CFMutableArrayRef ar = CFArrayCreateMutable(NULL, 0, NULL);
for (NSUInteger i = 0; i < 1000; i++)
{
CFArrayAppendValue(ar, (void*)i);
}
CFRelease(ar); /* Releasing the array */
То же самое относится и к версии CoreFoundation других контейнеров.
Ответ 5
Я создал простую обертку Objective C вокруг старого старого массива C, который будет использоваться более удобно: https://gist.github.com/4705733
Ответ 6
Если порядок целых чисел не требуется, и если существуют только уникальные значения
вы также можете использовать NSIndexSet или NSMutableIndexSet Вы сможете легко добавлять и удалять целые числа или проверять, содержит ли ваш массив целое число с
- (void)addIndex:(NSUInteger)index
- (void)removeIndex:(NSUInteger)index
- (BOOL)containsIndexes:(NSIndexSet *)indexSet
Подробнее о documentation.
Ответ 7
Я думаю, что намного проще использовать NSNumbers. Это все, что вам нужно сделать:
NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1];
NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2];
.
.
.
NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];