您当前的位置:首页 > 计算机 > 编程开发 > Objective-C

OC中的包裹类

时间:05-12来源:作者:点击数:

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

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

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
上一篇:OC之NSData 下一篇:OC中的通知
推荐内容
相关内容
栏目更新
栏目热门