有时候我们开发会遇到这样一个问题:怎么将react或者point变量保存到数组Array中?如果暴力点的话,可能我们会这样做。
NSMutableArray * temp = [NSMutableArray array];
[temp addObject:CGRectMake(100, 100, 0, 100)];
很快就知道结果了,报错。
数组不支持非对象类型,rect是结构体类型的数据结构。
那温柔点来,介绍一种办法来解决这个问题。
启发来源:@(1) 这样的写法。@(1)代表什么呢?
@(1),会将其转化成对象[NSNumber numberWithInt:5].
如果这样做的话,那么rect也是可以采用同样的做法.找了一些资料,有了如下的结果办法
添加:
声明一个结构体,包含了rect
struct ViewRect{
CGRect rect;
};
@interface ViewController ()
typedef struct ViewRect ViewRect; // 声明
@end
struct ViewRect left_up = {CGRectMake(0, 0, 100, 100)};
struct ViewRect left_down = {CGRectMake(0,100,200,100)};
NSMutableArray * temp = [NSMutableArray array];
[temp addObject:[NSValue valueWithBytes:&left_up objCType:@encode(ViewRect)]];
[temp addObject:[NSValue valueWithBytes:&left_up objCType:@encode(ViewRect)]];
取值:
采用值传递的原理取值。代码如下:
ViewRect viewRect;
NSValue * value = temp[0];
[value getValue:&viewRect];
NSLog(@"show result:%@",NSStringFromCGRect(viewRect.rect));
这样就额可以解决这个数组保存rect结构体的办法了。