如果要创建整数数组,可以使用NSInteger吗?你必须使用NSNumber吗?如果是这样,为什么呢?
答案 0 :(得分:155)
您可以使用普通的旧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]);
答案 1 :(得分:52)
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)
注意:数组在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
答案 2 :(得分:5)
如果你想使用NSArray,你需要一个Objective-C类来加入它 - 因此需要NSNumber。
也就是说,Obj-C仍然是C,因此如果需要,你可以使用常规的C数组并保持常规的int而不是NSNumbers。
答案 3 :(得分:4)
您可以使用CFArray代替NSArray。 Here是一篇解释如何的文章。
CFMutableArrayRef ar = CFArrayCreateMutable(NULL, 0, NULL);
for (NSUInteger i = 0; i < 1000; i++)
{
CFArrayAppendValue(ar, (void*)i);
}
CFRelease(ar); /* Releasing the array */
同样适用于其他容器的CoreFoundation版本。
答案 4 :(得分:4)
我在旧的C数组周围创建了一个简单的Objective C包装器,以便更方便地使用:https://gist.github.com/4705733
答案 5 :(得分:3)
如果不需要整数的顺序, 如果只有唯一值
您也可以使用NSIndexSet或NSMutableIndexSet 您将能够轻松添加和删除整数,或检查您的数组是否包含带
的整数- (void)addIndex:(NSUInteger)index
- (void)removeIndex:(NSUInteger)index
- (BOOL)containsIndexes:(NSIndexSet *)indexSet
查看documentation了解详情。
答案 6 :(得分:2)
我认为使用NSNumbers要容易得多。这就是你需要做的所有事情:
NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1];
NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2];
.
.
.
NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];