美文网首页
记录NSNumber对象封装基本数据类型的用途

记录NSNumber对象封装基本数据类型的用途

作者: FanChason | 来源:发表于2018-12-24 11:32 被阅读12次

开篇

最近遇到几次数据转换问题,并用NSNumber得以解决。才想着总结一下IOS开发中NSNumber这一重要的类

问题记录如下:
1,plist文件中如何读取number、boolean类型数据?
2,json文件中如何读取long类型数据?

以上问题你是否有遇到尼?且看下文

NSNumber定义

  • 1,NSArray、NSDictionary、NSSet 等集合对象只能保存对象。如果要保存 char、short、int、float、double、BOOL 或指向结构的指针等基础数据类型,则可以先将这些基本数据类型封装成 NSNumber 对象,再存入集合对象。
  • 2,NSNumber 类用来包装基本数据类型。
  • 3,NSValue 是 NSNumber 的父类。
  • 4,不能直接用 NSNumber 对象做计算,只能提取值。

值转换

Snip20181221_37.png
Snip20181221_38.png

用途或者案例

1,plist中如何读取number、boolean类型数据?

举例:

创建一个plist文件

Snip20181221_39.png

获取plist文件

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"student" ofType:@"plist"];
    NSMutableDictionary *studentDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

错误的获取方法❌

  • 获取代码
    // /*
    NSString *name = studentDict[@"name"];
    NSUInteger age = studentDict[@"age"];
    NSInteger sex = studentDict[@"sex"];
    BOOL isGoodStudent = studentDict[@"isGoodStudent"];
    BOOL isNortherners = studentDict[@"isNortherners"];
    
    NSLog(@"\n");
    NSLog(@"------------- wrong method log-------------");
    
     NSLog(@"name : %@", name);
     NSLog(@"age : %ld", age);
     NSLog(@"sex : %ld", sex);
     NSLog(@"isGoodStudent : %d", isGoodStudent);
     NSLog(@"isNortherners : %d", isNortherners);
    // */
  • 日志


    Snip20181221_40.png

正确的获取方法✅

  • 获取代码
    NSString *name = studentDict[@"name"];
    NSUInteger age = [(NSNumber *)studentDict[@"age"] unsignedIntegerValue];
    NSInteger sex = [(NSNumber *)studentDict[@"sex"] integerValue];
    BOOL isGoodStudent = [(NSNumber *)studentDict[@"isGoodStudent"] boolValue];
    BOOL isNortherners = [(NSNumber *)studentDict[@"isNortherners"] boolValue];
    
    
    NSLog(@"\n");
    NSLog(@"------------- right method log-------------");

    NSLog(@"name : %@", name);
    NSLog(@"age : %ld", age);
    NSLog(@"sex : %ld", sex);
    NSLog(@"isGoodStudent : %d", isGoodStudent);
    NSLog(@"isNortherners : %d", isNortherners);
  • 日志


    Snip20181221_41.png

2,json文件中如何读取long类型数据?

举例:

  • 创建一个json文件,添加一个键值
{
    "review": 1
}
  • 读取该文件中review键对应的值
    NSString *filePath2 = [[NSBundle mainBundle] pathForResource:@"init" ofType:@"json"];
    NSData *data = [[NSData alloc] initWithContentsOfFile:filePath2];
    NSMutableDictionary *jspnDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
    NSLog(@"\n");
    NSLog(@"jspnDict : %@", jspnDict);

    long review = [(NSNumber *)jspnDict[@"review"] longValue];
    NSLog(@"\n");
    NSLog(@"------------- getJSONFileData log-------------");
    
    NSLog(@"review : %ld", review);
  • log
jspnDict : {
    review = 2;
}

------------- getJSONFileData log-------------
review : 2

参考:
1,https://www.jianshu.com/p/0f6a4fe4d222
2,https://www.jianshu.com/p/6fa0926dd478
3,官方文档:https://developer.apple.com/documentation/foundation/nsnumber?language=objc

相关文章

  • 记录NSNumber对象封装基本数据类型的用途

    开篇 最近遇到几次数据转换问题,并用NSNumber得以解决。才想着总结一下IOS开发中NSNumber这一重要的...

  • OC -- 数组

    #pragma 将基本数据类型封装对象 int a = 25; NSNumber *objectA = [NSNu...

  • NSNumber、NSValue、NSDate、NSArray

    NSNumber1.1用于将基本数据类型的常量或变量封装成OC类的对象1.2封装方法:numberWith.../...

  • NSNumber

    NSNumber//用来封装 基本数据类型 int float double char ….以前@“5” @“6”...

  • 数据类型

    NSNumber NSNumber 是一个类。OC中提供了NSNumber类来将基本数据类型“包装”成数字对象,这...

  • KVC详解

    NSNumber和NSValue对基础C数据类型的对象化封装 - 王中周的个人博客 - 博客频道 -...

  • object-c 基础十七 【NSNumber】

    将普通数据类型转换为OC对象; NSNumber *int = [[NSNumber alloc] initWit...

  • NSNumber、NSValue、NSNull

    NSNumber是用来包装基本数据类型 包装 其实在创建NSNumber的时候,我们就是已经将基本数据类型包装起来...

  • Java常用集合总结

    基本数据类型包装类(如Integer,Boolean):为了方便操作基本数据类型值,将其封装成了对象,在对象中定义...

  • 泛型不能是基本数据类型

    泛型要求是对象类型,而基本数据类型在Java中不属于对象。但是基本数据类型有其封装类,且为对象类型。

网友评论

      本文标题:记录NSNumber对象封装基本数据类型的用途

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