【NSValue Objective-C语言】

一、NSValue是什么意思

1.比如,我的iOS界面上面有4个按钮,每1个按钮是不是都有自己的坐标啊,

我想把这按钮的4个坐标存到1个数组里面去,

你看,是不是有4个CGPoint吧,

CGPoint p1 = CGPointMake(10,20);

CGPoint p2 = CGPointMake(110,120);

CGPoint p3 = CGPointMake(110,320);

CGPoint p4 = CGPointMake(110,240);

我拿到4个结构体啊,是不是CGPoint结构体啊

大家思考一下,我能不能把这4个结构体,存到我的NSArray数组里面去啊,不可以

是不是NSArray数组里面只能存OC对象啊,这4个结构体是OC对象吗,不是,

我就是要存,怎么办呢

那就需要先把这个结构体,包装到1个OC对象里面去,

再把OC对象,保存到NSArray数组里面去,

包装这个结构体的类,Foundation框架里面已经有了,叫做NSValue

2.我们之前学习的结构体:

1)NSRange

2)CGPoint

3)CGSize

4)CGRect

这些都是结构体,它们的变量是无法存储到集合之中的

解决方案:

先将这些结构体变量存储到OC对象中,再将OC对象存储到集合之中

NSValue类的对象,就是用来包装结构体变量的

例如,NSValue *v1 = [NSValue valueWithPoint:p1];

这时候,我就把p1这个结构体包装到v1对象里面去了吧

NSValue *v2 = [NSValue valueWithPoint:p2];

NSValue *v3 = [NSValue valueWithPoint:p3];

NSValue *v4 = [NSValue valueWithPoint:p4];

这时候,我就把p1,p2,p3,p4这4个结构体变量,包装到v1,v2,v3,v4这4个NSValue里面去了,

再把v1,v2,v3,v4这4个NSValue对象,存到NSArray数组里面去

NSArray *arr = @[v1,v2,v3,v4];

跟我们之前讲的NSNumber是不是一样一样的啊

唯一不同的是,NSNumber是用来包装基本数据类型的,而这个NSValue呢,包装结构体的,

好,我们现在遍历出来看一下啊,元素什么类型,NSValue,

for(NSValue *v in arr){

//这个时候啊,我要拿到存储在里面的结构体,该怎么拿

//v是什么东西,这个迭代变量是我们数组中的每1个元素,对不对,数组里面的每1个元素是什么,是不是NSValue对象啊,真正那个结构体,是存在这个对象里面的吧,

v.pointValue;

//pointValue就可以拿到封装在这个NSValue对象当中的point结构体变量,

NSLog(@“%@”,NSStringFromPoint(v.pointValue));

}

4.给大家介绍几个函数啊,

1)(NSString *) NSStringFromPoint(NSPoint aPoint)

之前我们讲过一个函数,

(NSString *)NSStringFromRange(NSRange range);

是不是它可以把这个结构体,Range结构体变量,转化成1个字符串啊

其实还有NSStringFromPoint,

NSStringFromSize,

NSStringFromRect,

这个时候,我这个NSValue里面存的是1个Point结构体吧,那我就用NSStringFromPoint,

NSLog(@“%@”,NSStringFromPoint(v.pointValue));

输出:{10,20}

{110,120}

{110,320}

{110,240}

二、CGSize要存进去呢

CGSize s1 = CGSizeMake(100,10);

CGSize s2 = CGSizeMake(100,10);

CGSize s3 = CGSizeMake(100,10);

CGSize s4 = CGSizeMake(100,10);

现在,我有4个CGSize结构体吧,我想把它存到NSArray里面去,怎么存,

先把CGSize结构体变量,放到哪儿去,NSValue对象里面去,对不对,

NSValue *v1 = [NSValue valueWithSize:s1];

NSValue *v2 = [NSValue valueWithSize:s2];

NSValue *v3 = [NSValue valueWithSize:s3];

NSValue *v4 = [NSValue valueWithSize:s4];

NSArray *arr = @[v1,v2,v3,v4];

for(NSValue *v in arr){

NSLog(@“%@”,NSStringFromSize(v.sizeValue));

}

现在,真正的这个结构体,CGSize,是存在这个NSValue对象的属性里面的吧,哪个属性,v.sizeValue

输出:{100,10}

{100,10}

{100,10}

{100,10}

以上,就是NSValue的全部内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风清晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值