如果您想创建一个整数数组,可以使用NSInteger吗?您必须使用NSNumber吗?如果是这样,为什么要使用NSNumber?
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]);
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]
如果你想要一个 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
如果你想使用NSArray,你需要一个Objective-C类来放置其中 - 因此需要NSNumber。
话虽如此,Obj-C仍然是C语言,因此如果需要,你可以使用常规的C数组并保存常规的整数,而不是NSNumbers。
如果不需要对整数排序,并且只有唯一的值
你也可以使用NSIndexSet或NSMutableIndexSet。你可以轻松地添加和删除整数,或者检查你的数组是否包含一个整数。
- (void)addIndex:(NSUInteger)index
- (void)removeIndex:(NSUInteger)index
- (BOOL)containsIndexes:(NSIndexSet *)indexSet
请查看文档以获取更多信息。
NSSet
(并使用包装在 NSNumber
中的整数) 有什么问题吗? - dreamlax我认为使用NSNumbers更加容易。你只需要这样做:
NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1];
NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2];
.
.
.
NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];
for
循环或者另一个数组来存储数字,然后使用 arrayWithArray
方法。 - Neeku
NSArray
底层的[可能是]专家级别的优化,我相信您不会感受到性能损失。 - dreamlaxNSInteger
只是int
的typedef
。 - Franklin Yu