在iOS中创build一个整数数组

如果你想制作一个整数数组,你可以使用NSInteger吗? 你必须使用NSNumber吗? 如果是的话,那为什么?

你可以使用一个普通的旧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]); 

或者,您可以使用NSArrayNSMutableArray ,但是在这里您需要将NSNumber实例中的每个整数封装起来(因为NSArray对象被devise用于保存类实例)。

 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数组:

 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数组:

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

这也是正确的:

 var array = Array(1...10) 

NB:数组在Swift中是强types的; 在这种情况下,编译器从内容中推断出数组是一个整数数组。 你也可以使用这种显式types的语法:

 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 

如果你想使用一个NSArray,你需要一个Objective-C类来放入它 – 因此NSNumber的要求。

也就是说,Obj-C仍然是C,所以你可以使用常规的C数组,并且如果需要的话,可以使用常规的整数而不是NSNumber。

您可以使用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版本的其他容器也一样。

我创build了一个简单的Objective C包装器,用于更好地使用旧的C数组: https : //gist.github.com/4705733

如果整数的顺序不是必需的,并且只有唯一的值

你也可以使用NSIndexSet或NSMutableIndexSet你将能够轻松地添加和删除整数,或检查你的数组是否包含一个整数

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

检查文档以获取更多信息。

我认为使用NSNumbers要容易得多。 这一切你需要做的:

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