【iOS开发】结构体如何存入数组中

1、常见结构体的储存

比较常见的结构体:CGPoint  ,CGSize,CGRect。。。。。。我们如何存放到数组中呢?因为是结构体不是对象,不能添加到数组中,解决方法:把这些常见的结构装换成对象,让后放进去,取出来在装换成结构体使用。我们想到了NSValue使用方法如下:

  CGPoint point = CGPointMake(0, 0);
    NSMutableArray *array = [[NSMutableArray alloc]initWithCapacity:0];
    NSValue *value = [NSValue valueWithCGPoint:point];
    [array addObject:value];

取出数组之后的对象的使用:

 NSValue *tmpValue = array[0];
    CGPoint tmpPoint = [tmpValue CGPointValue];

下面是一些常见的结构体使用方法是一样的

@interface NSValue (NSValueUIGeometryExtensions)

+ (NSValue *)valueWithCGPoint:(CGPoint)point;
+ (NSValue *)valueWithCGVector:(CGVector)vector;
+ (NSValue *)valueWithCGSize:(CGSize)size;
+ (NSValue *)valueWithCGRect:(CGRect)rect;
+ (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform;
+ (NSValue *)valueWithUIEdgeInsets:(UIEdgeInsets)insets;
+ (NSValue *)valueWithUIOffset:(UIOffset)insets NS_AVAILABLE_IOS(5_0);

- (CGPoint)CGPointValue;
- (CGVector)CGVectorValue;
- (CGSize)CGSizeValue;
- (CGRect)CGRectValue;
- (CGAffineTransform)CGAffineTransformValue;
- (UIEdgeInsets)UIEdgeInsetsValue;
- (UIOffset)UIOffsetValue NS_AVAILABLE_IOS(5_0);

@end

2、自定义结构体的存储

同样是先转换NSValue对象再加入数组中,代码如下:

//   自定义的结构体
    struct Test {
        int ID;
        CGFloat  height;
    };
    typedef struct Test Test;
    
//    封装数据
    Test tmpTest;
    tmpTest.height = 80.0;
    tmpTest.ID = 100;
    NSLog(@"id==%d,height==%f",tmpTest.ID,tmpTest.height);
    
    NSValue *customValue = [NSValue valueWithBytes:&tmpTest objCType:@encode(struct Test)];
//    取出数据
    Test tmpTest1;
    [customValue getValue:&tmpTest1];
    NSLog(@"id==%d,height==%f",tmpTest1.ID,tmpTest1.height);

关于存到数据组和上面的一样就不在写了




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WMSmile

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

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

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

打赏作者

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

抵扣说明:

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

余额充值