我知道要在Object-c中创建带整数的数组,它们必须是对象。 所以,如果我想要整数数组,我应该创建它们:
NSNumber * myArrayInteger = [NSNumber NumberWithInteger:2];
到目前为止,这么好。 但是如果我想要组成的数组让我们说超过30个整数。我应该为每个代码使用上面的代码还是有一个更友好的解决方案?
答案 0 :(得分:3)
NSArray只能包含对象,而不是像int,float等原始类型。所以你需要用NSNumber对象包装它们。对于30个整数,您需要将它们全部包装在NSNumber中,如果可能的话可以使用循环。
但有一点是Obj-C是C的超级集合。所以你可以根据需要使用int的纯C数组。有时(特别是对于更高维度的阵列)它们更适合维护。
int arr[30];
答案 1 :(得分:3)
就个人而言,我发现自己经常使用整数数组,因此我不得不简化流程。例如:
NSArray myList=klist(4,2,3,2,3);
等同于:
NSArray myList = [NSArray arrayWithObjects:
[NSNumber numberWithInt:2],
[NSNumber numberWithInt:3],
[NSNumber numberWithInt:2],
[NSNumber numberWithInt:3],nil];
以下是我使用的功能:
#define kInt(x) [NSNumber numberWithInt:x]
#define kArray(...) [NSMutableArray arrayWithObjects: __VA_ARGS__,nil]
#define klist(...) [arrays iList:__VA_ARGS__]
#define k1ist(x) [arrays iList:1,x]
#define krange(x) [arrays range:x]
#define kAppend(...) [arrays append_arrays:__VA_ARGS__,nil]
@interface arrays : NSObject
{}
+(NSMutableArray *) range:(int) i;
+(NSMutableArray *) iList:(int) n, ...;
@end
@implementation arrays
+(NSMutableArray *) range:(int) i{
NSMutableArray *myRange = [NSMutableArray array];
for (int I=0;I<i;I++)
{
[myRange addObject:kInt(I)];
}
return myRange;
}
+(NSMutableArray *) iList:(int) n, ...{
int ii;
NSMutableArray *myRange = [NSMutableArray array];
va_list myArgs;
va_start(myArgs,n);
for (int i=0;i<n;i++){
ii = va_arg(myArgs,int);
[myRange addObject: kInt(ii)];
}
return myRange;
}
@end