-
【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的全部内容
-
相关阅读:
数据结构(一)C语言版:绪论——数据结构基本概念真题
OVN 流表基础 -- 基于 kubeOVN (二)
【大模型应用开发教程】动手学大模型应用开发,一起探索LLM Universe
Vue3系列2--项目目录介绍及运行项目
从初级程序员到CEO,汤鹏与时代碰撞出的那些“火花”
动态神经网络时间序列预测
私有化+国产化,这款安全可靠的知识管理系统超赞
DNS解析顺序是怎样的?
【论】Balancing bike sharing systems with constraint programming
后缀数组-模板详解
-
原文地址:https://blog.csdn.net/madoca/article/details/128087848