OC中的包裹类
通过前面对Foundation框架中NSArray、NSDictionary的学习,对于OC语言中的存储类型所存储的都是对象,C语言中的int等基本数据类型无法存到数组、字典中。有什么办法能解决这个问题呢?
其实Foundation框架中有专门解决这个问题的类-NSNumber类和NSValue类,可以借助两个类实现类型之间的转换。
NSNumber类
NSNumber类实现的功能是C语言中的基本数据类型和OC对象相互转换。
NSValue类实现的功能是C语言声明的结构体和OC对象相互转换。
下面先来学习一下NSNumber的具体使用:
the array is :(
5
)
the number is :5
NSValue类的使用
对于NSValue来说,它的作用是可以将C语言中的结构体转换成对象,反之,将结构体对象转换成结构体也可以。
目前我们接触过的关于Foundation框架中的结构体只有NSRange,我们还会接触到NSPoint(记录某个点的坐标的结构体,包含X和Y两个浮点型的变量)、NSSize(包含width和height两个浮点型变量)、NSRect(包含NSPoint类型的变量origin和NSSize类型的变量size,一般定义四边形的时候用)。
以上四个结构体,我们目前只需掌握NSRange即可,其他三个以后碰到会讲。
例子:
在这两个包裹类中,还有一些方法(一般用这两个类进行类型转换时使用,很少单独用这两个类),如果感兴趣,可以参考文档。
通过本章的讲解,Foundation框架中的常用数据类型基本上就讲完了,还有两个比较常用的类型:日期类(NSDate)和二进制类(NSData)比较简单,会在讲解过程中给大家介绍。
其实Foundation框架中有专门解决这个问题的类-NSNumber类和NSValue类,可以借助两个类实现类型之间的转换。
NSNumber类
NSNumber类实现的功能是C语言中的基本数据类型和OC对象相互转换。
NSValue类实现的功能是C语言声明的结构体和OC对象相互转换。
下面先来学习一下NSNumber的具体使用:
#import <Foundation/Foundation.h> int main() { int number=5; NSNumber * intNum=[[NSNumber alloc] initWithInt:number]; //将对象5存储到数组中。 NSArray * array=[NSArray arrayWithObjects:intNum, nil]; //输出array数组中的对象 NSLog(@"the array is :%@",array); //从数组中得到对象5,由于数组中只有一个对象5,所以索引是0 NSNumber * getNum=[array objectAtIndex:0]; //重新得到int类型的值 int getNumber=[getNum intValue]; NSLog(@"the number is :%d",getNumber); return 0; }输出结果是:
the array is :(
5
)
the number is :5
NSValue类的使用
对于NSValue来说,它的作用是可以将C语言中的结构体转换成对象,反之,将结构体对象转换成结构体也可以。
目前我们接触过的关于Foundation框架中的结构体只有NSRange,我们还会接触到NSPoint(记录某个点的坐标的结构体,包含X和Y两个浮点型的变量)、NSSize(包含width和height两个浮点型变量)、NSRect(包含NSPoint类型的变量origin和NSSize类型的变量size,一般定义四边形的时候用)。
以上四个结构体,我们目前只需掌握NSRange即可,其他三个以后碰到会讲。
例子:
#import <Foundation/Foundation.h> int main() { //定义一个NSRange类型的变量 NSRange range; range.length=2; range.location=1; //将range转换成对象 NSValue * value=[NSValue valueWithRange:range]; //将NSRange对象转换成NSRange变量 NSRange theRange=[value rangeValue]; //输出这个结构体中的数据,(unsigned long)是强制类型转换,和C语言类似 NSLog(@"%lu,%lu",(unsigned long)theRange.length,(unsigned long)theRange.location); return 0; }输出结果:2,1
在这两个包裹类中,还有一些方法(一般用这两个类进行类型转换时使用,很少单独用这两个类),如果感兴趣,可以参考文档。
通过本章的讲解,Foundation框架中的常用数据类型基本上就讲完了,还有两个比较常用的类型:日期类(NSDate)和二进制类(NSData)比较简单,会在讲解过程中给大家介绍。