NSNumber *a1 = [NSNumber numberWithUnsignedInt:2];//long
NSNumber *b1 = [NSNumber numberWithBool:YES];//char||BOOL
NSNumber *c1 = [NSNumber numberWithChar:'a'];//char||BOOL
NSNumber *d1 = [NSNumber numberWithDouble:2.222];//double
NSNumber *e1 = [NSNumber numberWithInteger:3];//long
NSNumber *f1 = [NSNumber numberWithFloat:2.222];//float
NSNumber *g1 = [NSNumber numberWithLong:222222];//long
NSNumber *h1 = [NSNumber numberWithLongLong:99999999999999999];//long
NSNumber *i1 = [NSNumber numberWithInt:1];//int
NSNumber *j1 = [NSNumber numberWithShort:111];//short
NSNumber *k1 = [NSNumber numberWithFloat:2];//float
NSNumber *l1 = [[NSNumber alloc]initWithInt:1]; //int
NSNumber *m1 = [NSNumber numberWithUnsignedChar:'b'];//short
NSNumber *n1 = [NSNumber numberWithUnsignedInteger:22];//long
NSNumber *o1 = [NSNumber numberWithUnsignedLong:999999999999999];//long
NSNumber *p1 = [NSNumber numberWithUnsignedLongLong:99999999999999];//long
NSNumber *q1 = [NSNumber numberWithUnsignedShort:33333];//int
NSMutableArray *array = [[NSMutableArray alloc]initWithObjects:a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1,p1,q1, nil];
char a = 'a';
for(id number in array){
const char * pObjCType = [(NSNumber *)number objCType];
if(strcmp(pObjCType, @encode(int))==0){
NSLog(@"%c is int",a);
}else if(strcmp(pObjCType, @encode(double))==0){
NSLog(@"%c is double",a);
}else if(strcmp(pObjCType, @encode(float))==0){
NSLog(@"%c is float",a);
}else if(strcmp(pObjCType, @encode(BOOL))==0){
NSLog(@"%c is BOOL",a);
}else if(strcmp(pObjCType, @encode(char))==0){
NSLog(@"%c is char",a);
}else if(strcmp(pObjCType, @encode(long))==0){
NSLog(@"%c is long",a);
}else if(strcmp(pObjCType, @encode(long long))==0){
NSLog(@"%c is long long",a);
}else if(strcmp(pObjCType, @encode(integer_t))==0){
NSLog(@"%c is integer_t",a);
}else if(strcmp(pObjCType, @encode(unsigned int))==0){
NSLog(@"%c is unsigned int",a);
}else if(strcmp(pObjCType, @encode(short))==0){
NSLog(@"%c is short",a);
}
a++;
}
注释为结果。
又是一个NSNumber的问题,这次是判断NSNumber里面放的值的问题。
使用以上方法判断,Unsigned的值全军覆没,一个都判断不出来。另外longlong 归为long类型,还有char和bool分辨不出来,其它的需求基本没问题。
也就是说如果使用的需求没有上述情况就可以使用如上方法判断nsnumber类型。