Создание массива целых чисел в iOS - PullRequest
93 голосов
/ 27 июля 2010

Если вы хотите создать массив целых чисел, можете ли вы использовать NSInteger?Вы должны использовать NSNumber?Если так, то почему?

Ответы [ 7 ]

155 голосов
/ 27 июля 2010

Вы можете использовать обычный старый массив 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]);
53 голосов
/ 04 марта 2014

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)

Примечание: массивы строго типизированы в Swift; в этом случае компилятор выводит из содержимого, что массив является массивом целых чисел. Вы также можете использовать этот синтаксис явного типа:

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

Если вам нужен массив Double, вы должны использовать:

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
5 голосов
/ 27 июля 2010

Если вы хотите использовать NSArray, вам нужен класс Objective-C, чтобы вставить его - отсюда и требование NSNumber.

Тем не менее, Obj-C по-прежнему является C, поэтому вы можете использовать обычные массивы C и хранить обычные целые числа вместо NSNumbers, если вам нужно.

4 голосов
/ 04 февраля 2013

Я создал простую обёртку Objective C для старого доброго массива C, чтобы его было удобнее использовать:

4 голосов
/ 06 сентября 2011

Вы можете использовать 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 для других контейнеров.

3 голосов
/ 19 февраля 2013

Если порядок ваших целых чисел не требуется, и если есть только уникальные значения

вы также можете использовать NSIndexSet или NSMutableIndexSet Вы сможете легко добавлять и удалять целые числа или проверять, содержит ли ваш массив целое число с

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

Для получения дополнительной информации см. Документацию .

2 голосов
/ 02 декабря 2012

Я думаю, что намного проще использовать NSNumbers. Это все, что вам нужно сделать:

NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1];
NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2];
.
.
.
NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...