c语言查询包裹的程序,OC中的包裹类

通过前面对Foundation框架中NSArray、NSDictionary的学习,对于OC语言中的存储类型所存储的都是对象,C语言中的int等基本数据类型无法存到数组、字典中。有什么办法能解决这个问题呢?

其实Foundation框架中有专门解决这个问题的类-NSNumber类和NSValue类,可以借助两个类实现类型之间的转换。

NSNumber类

NSNumber类实现的功能是C语言中的基本数据类型和OC对象相互转换。

NSValue类实现的功能是C语言声明的结构体和OC对象相互转换。

下面先来学习一下NSNumber的具体使用:

#import

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

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)比较简单,会在讲解过程中给大家介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值