NSNumber
NSArray和NSDictionary只能存储对象,而不能直接存储任何基本类型的数据,如int、float、double和struct。
但是可以用对象封装基本数据,将基本数据封装到一个对象中,就可以将这个对象放入NSArray和NSDictionAry中了。
Number就是来封装基本数据类型的,它可以创建和初始化不同类型的数字对象。
类方法初始化
+ (NSNumber*)numberWithChar: (char)value;
+ (NSNumber*)numberWithInt: (int)value;
+ (NSNumber*)numberWithFloat: (float)value;
+ (NSNumber*)numberWithBool: (BOOL) value;
还有许多这样的方法,包括long型、long long型和无符号整数。
//创建int类型对象
NSNumber *intNb = [NSNumber numberWithInteger:22];
//创建long类型对象
NSNumber *longNb = [NSNumber numberWithLong:333];
//创建char类型对象
NSNumber *charNb = [NSNumber numberWithChar:'v'];
//创建float类型对象
NSNumber *floatNb = [NSNumber numberWithFloat:111.0f];
<pre name="code" class="objc">//创建double类型对象
NSNumber *doubleNb = [NSNumber numberWithDouble:44.444];
//创建bool类型对象 NSNumber *boolNb = [NSNumber numberWithBool:YES];
字面量创建
也可以使用字面量语法来创建对象,代码看起来更简洁。
NSNumber *charNb = @'v'; //字符型
NSNumber *intNb = @12; //整型
NSNumber *ulongNb = @12345lu; //无符号长整数
NSNumber *llongNb = @12345ll; //long long
NSNumber *floatNb = @123.45f; //浮点型
NSNumber *doubleNb = @123.45; //双浮点型
NSNumber *boolNb = @YES; //布尔
NSNumber对象转成基本数据
将一个基本数据类型封装到NSNumber中后,可以重新获得它。
- (char)charValue;
- (int)intValue;
- (float)floatValue;
- (BOOL)boolValue;
- (NSString*)stringValue;
char c = [charNb charValue];
int int1 = [intNb intVaue];
float f1= [floatNb floatValue];
double d1 = [doubleNb doubleValue];
BOOL b1 = [boolNb boolValue];
比较
NSNumber *intNb = @12;<pre name="code" class="objc">NSNumber *floatNb = @123.45f;
//判断两个对象的值是否相等
if ([intNb isEqualToNumber:floatNb] == YES ) {
NSLog(@"值相等");
} else {
NSLog(@"值不相等");
}
//比较两个对象的值大小
if ( [intNb compare:floatNb] == NSOrderedAscending) {
NSLog(@"左边的数字小");
} else {
NSLog(@"左边的数字大");
}
结果
值不相等
左边的数字小