美文网首页iOS开发总结
OC中如何判断NSNumber原始的数据类型

OC中如何判断NSNumber原始的数据类型

作者: Auditore | 来源:发表于2018-08-22 10:59 被阅读17次

OC的NSNumber有一个很坑的地方,比如BOOL型的基础数据类型,如果转成NSNumber,那么你取出来就是@1和@0了,那你就无法知道这个NSNumber原始的数据类型到底是BOOL还是Int或者long了。

所以我写了个方法来判断NSNumber的原始类型,如下:

+ (int ) originTypeFromNumber: (id) data {
  // 判断是不是数字类型
  if ([data isKindOfClass:[NSNull class]]) {
    return -1;
  }
  int type = -1;
  if([data isKindOfClass:[NSNumber class]])
  {
    if (strcmp([data objCType], @encode(float)) == 0)
    {
      type = 1;
    }
    else if (strcmp([data objCType], @encode(double)) == 0)
    {
      type = 2;
    }
    else if (strcmp([data objCType], @encode(int)) == 0)
    {
      type = 3;
    }
    else if (strcmp([data objCType], @encode(BOOL)) == 0)
    {
      type = 4;
    }else if (strcmp([data objCType], @encode(long)) == 0)
    {
      type = 5;
    }
    else{
      type = -1;
    }
  }
  return type;
}

例如你从网络上获取的JSON数据,存到了字典里,这时候,你想判断这个值的原始类型,那么就传入data,就可以根据返回的type来判断了。注意本方法只针对判断NSNumber类型的原始数据类型,因为其他的类型OC是可以分辨的。

相关文章

网友评论

  • shuangyue:strcmp([data objCType], @encode(BOOL)) == 0 好像不相等

本文标题:OC中如何判断NSNumber原始的数据类型

本文链接:https://www.haomeiwen.com/subject/drpeiftx.html