判断NSNumber值类型。

本文介绍了一种通过遍历数组中的NSNumber对象并利用objcType属性来判断其内部存储的数据类型的实现方法。该方法能够准确判断大多数数据类型,但在Unsigned类型、long long类型及char与bool类型上存在局限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        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类型。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值