NSNumber基本使用
在编程的过程中,一些基本数据类型的变量是必不可少的,但是在Objective-C编程语言当中,Objective-C的消息机制并不能向这些基本数据类型发送消息,而且Objective-C的集合(如:数组)当中是不能存放基本数据类型的,所以我们就需要将基本数据类型转化成对象来使用。Objective-C中提供了NSNumber类来将基本数据类型“包装”成数字对象,这样我们就可以将基本数据类型当做对象来处理了。
NSNumber对象创建
当我们需要把基本数据类型转换成NSNumber类型的对象时,转换方式通常有以下两种。
使用@符号进行快速封装;
调用NSNumber类提供的方法。通过调用NSNumber类中提供的方法,NSNumber类型的对象不仅仅可以转换int、float、double这些常规的基本数字类型,还可以包装char、BOOL,但并不常用。
+ (NSNumber *)numberWithInt:(int)value; //转换int
+ (NSNumber *)numberWithFloat:(float)value; //转换float
+ (NSNumber *)numberWithDouble:(double)value; //转换double
+ (NSNumber *)numberWithBool:(BOOL)value; //转换bool
+ (NSNumber *)numberWithInteger:(NSInteger)value; //转换NSInteger
下方的示例代码中演示了常用的基本数据类型转换成NSNumber对象的方法,当我们需要打印NSNumber对象时,在NSLog()中需要使用%@。
int main(int argc, const char * argv[]) {
@autoreleasepool {
//NSNumber对象创建
//快速创建
NSNumber * intNum1 = @10;
NSNumber * floatNum1 = @3.14;
//使用类方法创建
NSNumber * intNum2 = [NSNumber numberWithInt:10];
NSNumber * floatNum2 = [NSNumber numberWithFloat:3.14];
NSNumber * integerNum = [NSNumber numberWithInteger:100];
NSNumber * doubleNum = [NSNumber numberWithDouble:100.01];
NSLog(@"%@--%@--%@--%@--%@--%@", intNum1, intNum2,floatNum1,floatNum2,integerNum,doubleNum);
}
return 0;
}
运行结果:
NSNumber对象与基本数据类型之间的转换
基本数据类型可以转换为NSNumber之外,NSNumber类的对象也可以转换成基本数据类型,在NSNumber类中也提供了对应的属性与方法。
@property (readonly) int intValue; //NSNumber对象转成int
@property (readonly) float floatValue; //NSNumber对象转成float
@property (readonly) double doubleValue; //NSNumber对象转成double
@property (readonly) BOOL boolValue; //NSNumber对象转成BOOL
@property (readonly) NSInteger integerValue; //NSNumber对象转成NSInteger
下方的示例代码演示了如何把NSNumber对象转换成其他基本数据类型。
int main(int argc, const char * argv[]) {
@autoreleasepool {
//使用类方法创建
NSNumber * intNum = [NSNumber numberWithInt:10];
NSNumber * floatNum = [NSNumber numberWithFloat:3.14];
NSNumber * integerNum = [NSNumber numberWithInteger:100];
NSNumber * doubleNum = [NSNumber numberWithDouble:100.01];
//转换成基本数据类型
int intBasic = [intNum intValue];
float floatBasic = [floatNum floatValue];
double doubleBasic = [doubleNum doubleValue];
NSInteger integerBasic = [integerNum integerValue];
NSLog(@"%d--%f--%f--%ld",intBasic,floatBasic, doubleBasic,(long)integerBasic);
}
return 0;
}
运行结果:
对比
int : 当使用int类型定义变量的时候,可以像写C程序一样去使用。当你不知道程序运行在哪种处理器架构时,你最好使用NSInteger,因为int在32位系统中也许只是int类型,而在64位系统中int可能变成long型。除非不得不使用int/long型,否则推荐使用NSInteger。
NSInteger/NSUInteger是一种动态定义的类型,在不同的设备,不同的架构,有可能是int类型,有可能是long类型。NSUInteger是无符号的,即没有负数,NSInteger是有符号的。
NSInteger是基础类型,NSNumber是一个类,如果需要在数组中存储一个数值,直接使用NSInteger是不行的,因为Objective-C的集合当中存储的数据必须是对象。
示例代码
最后编辑时间为: August 27th , 2017 at 09:51 am
本文由 99ios 创作,转载请注明出处