美文网首页
Foundation框架(四) — NSNumber

Foundation框架(四) — NSNumber

作者: 赵亦晨 | 来源:发表于2016-10-21 02:32 被阅读0次

在编程的过程中,一些基本数据类型的变量是必不可少的。但是在OC编程语言当中,OC的消息机制并不能向这些基本数据类型发送消息,而且OC的集合当中是不能存放基本数据类型的,所以我们就需要将基本数据类型转化成对象来使用。OC中提供了NSNumber类来将基本数据类型“包装”成数字对象,这样我们就可以将基本数据类型当做对象来处理了。

1.NSNumber基本使用

NSNumber可以将基本数据类型包装成对象,也可以将包装后的对象还原成基本数据类型,以下演示常用的几种基本数据类型的包装过程:

// 封装基本数据类型(int,float,double,char,BOOL)

intbasicInt=6;

floatbasicFloat=3.14;

doublebasicDouble=0.85;

charbasicChar='c';

BOOL basicBool=1;

// 创建int型对象

NSNumber*objectInt=[NSNumbernumberWithInt:basicInt];

NSLog(@"objectInt = %@",objectInt);

NSLog(@"还原后:%d",[objectInt intValue]);

// 创建float型对象

NSNumber*objectFloat=[NSNumbernumberWithFloat:basicFloat];

NSLog(@"objectFloat = %@",objectFloat);

NSLog(@"还原后:%f",[objectFloat floatValue]);

// 创建double型对象

NSNumber*objectDouble=[NSNumbernumberWithDouble:basicDouble];

NSLog(@"objectDouble = %@",objectDouble);

NSLog(@"还原后:%f",[objectDouble doubleValue]);

// 创建char型对象

NSNumber*objectChar=[NSNumbernumberWithChar:basicChar];

NSLog(@"objectChar = %@",objectChar);// 打印出ASCII码值

NSLog(@"还原后:%c",[objectChar charValue]);

// 创建BOOL型对象

NSNumber*objectBool=[NSNumbernumberWithBool:basicBool];

NSLog(@"objectBOOL = %@",objectBool);

NSLog(@"还原后:%d",[objectBool boolValue]);

//快速创建的方法

NSNumber*intNum=@80;// --->  [NSNumber numberWithInt:80];

NSNumber*floatNum=@3.14;// --->[NSNumber numberWithFloat:3.14];

NSNumber*boolNum=@YES;// ---> [NSNumber numberWithBool:YES];

NSNumber*charNum=@'a';// ---> [NSNumber numberWithChar:'a'];

// 快速创建变量需要将变量放在括号中

doubleheight=1.83;

NSNumber*doubleNum=@(height);// ---> [NSNumber numberWithDouble:height];

NSArray*array=@[intNum,floatNum,boolNum,charNum,doubleNum];

NSLog(@"array : %@",array);

//判断两个对象的值是否相等

if([intNum isEqualToNumber:floatNum]==YES){

NSLog(@"值相等");

}else{

NSLog(@"值不相等");

}

//比较两个对象的值大小

NSNumber*myNumber=@30;

if([intNum compare:myNumber]==NSOrderedAscending){

NSLog(@"第一个数字小");

}else{

NSLog(@"第一个数字大");

}

类方法创建一般都会有相应的实例初始化方法与之对应:

-(nullable instancetype)initWithCoder:(NSCoder*)aDecoder NS_DESIGNATED_INITIALIZER;

-(NSNumber*)initWithChar:(char)value NS_DESIGNATED_INITIALIZER;

-(NSNumber*)initWithUnsignedChar:(unsignedchar)value NS_DESIGNATED_INITIALIZER;

-(NSNumber*)initWithShort:(short)value NS_DESIGNATED_INITIALIZER;

-(NSNumber*)initWithUnsignedShort:(unsignedshort)value NS_DESIGNATED_INITIALIZER;

-(NSNumber*)initWithInt:(int)value NS_DESIGNATED_INITIALIZER;

-(NSNumber*)initWithUnsignedInt:(unsignedint)value NS_DESIGNATED_INITIALIZER;

-(NSNumber*)initWithLong:(long)value NS_DESIGNATED_INITIALIZER;

-(NSNumber*)initWithUnsignedLong:(unsignedlong)value NS_DESIGNATED_INITIALIZER;

-(NSNumber*)initWithLongLong:(longlong)value NS_DESIGNATED_INITIALIZER;

-(NSNumber*)initWithUnsignedLongLong:(unsignedlonglong)value NS_DESIGNATED_INITIALIZER;

-(NSNumber*)initWithFloat:(float)value NS_DESIGNATED_INITIALIZER;

-(NSNumber*)initWithDouble:(double)value NS_DESIGNATED_INITIALIZER;

-(NSNumber*)initWithBool:(BOOL)value NS_DESIGNATED_INITIALIZER;

-(NSNumber*)initWithInteger:(NSInteger)value NS_AVAILABLE(10_5,2_0)NS_DESIGNATED_INITIALIZER;

-(NSNumber*)initWithUnsignedInteger:(NSUInteger)value NS_AVAILABLE(10_5,2_0)NS_DESIGNATED_INITIALIZER;

2.int、 NSInteger、 NSUInteger、NSNumber之间的区别和联系

int : 当使用int类型定义变量的时候,可以像写C程序一样去使用。当你不知道程序运行在哪种处理器架构时,你最好使用NSInteger,因为在有可能int在32位系统中只是int类型,而在64位系统,int可能变成long型。除非不得不使用int/long型,否则推荐使用NSInteger。

NSInteger/NSUInteger是一种动态定义的类型,在不同的设备,不同的架构,有可能是int类型,有可能是long类型。NSUInteger是无符号的,即没有负数,NSInteger是有符号的。

NSInteger是基础类型,NSNumber是一个类,如果需要存储一个数值,直接使用NSInteger是不行的,因为OC的集合当中存储的数据必须是OC对象。

相关文章

网友评论

      本文标题:Foundation框架(四) — NSNumber

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