大家都知道,iOS中数组是无法存放基本数据类型的。
- 基本数据类型转对象,这个我相信大家都知道。
int a = 10;
NSNumber *aNumber = @(a);
NSMutableArray *arrM = [NSMutableArray array];
-
那么结构体呢?
结构体我们分成两种,第一种是系统的,第二种是自定义的。- 系统结构体包装成对象
CGPoint point = CGPointMake(0, 0); NSMutableArray *arrM = [NSMutableArray array]; [arrM addObject:@(point)];// 将系统结构体包装成对象保存到数组中 for (NSValue *obj in arrM) { CGPoint point = [obj CGPointValue];// 从对象中获取结构体 NSLog(@"point = %@", NSStringFromCGPoint(point)); }
-
自定义结构体包装成对象
(注意点:自定义的结构体只有进行CG_BOXABLE包装之后才能像系统结构体那样子操作)
// 这是视频信息结构体。包含视频的 大小 和 时长 struct VideoInfo { double videoSize; double videoDuration; }; typedef struct CG_BOXABLE VideoInfo VideoInfo;// 这是最关键的代码。去看系统的结构体,你也会发现系统的结构体也做了这一步操作。 // 自定义结构体的包装 VideoInfo info; info.videoSize = 2533329.0;// 假设视频大小为2533329.0 info.videoDuration = 10;// 假设视频10s NSMutableArray *arrM = [NSMutableArray array]; [arrM addObject:@(info)];// 自定义结构体经过CG_BOXABLE之后可以像系统结构体一样操作。、 for (NSValue *obj in arrM) { // 从对象中获取结构体,这里和系统结构体的获取方法有点差异。 VideoInfo info; [obj getValue:&info]; NSLog(@"size = %lf, videoDuration = %lf", info.videoSize, info.videoDuration); }
网友评论