大家都知道他巨,iOS中數(shù)組是無法存放基本數(shù)據(jù)類型的史隆。
- 基本數(shù)據(jù)類型轉(zhuǎn)對象投蝉,這個我相信大家都知道锤灿。
int a = 10;
NSNumber *aNumber = @(a);
NSMutableArray *arrM = [NSMutableArray array];
-
那么結構體呢屡限?
結構體我們分成兩種斯够,第一種是系統(tǒng)的校辩,第二種是自定義的杯聚。- 系統(tǒng)結構體包裝成對象
CGPoint point = CGPointMake(0, 0); NSMutableArray *arrM = [NSMutableArray array]; [arrM addObject:@(point)];// 將系統(tǒng)結構體包裝成對象保存到數(shù)組中 for (NSValue *obj in arrM) { CGPoint point = [obj CGPointValue];// 從對象中獲取結構體 NSLog(@"point = %@", NSStringFromCGPoint(point)); }
-
自定義結構體包裝成對象
(注意點:自定義的結構體只有進行CG_BOXABLE包裝之后才能像系統(tǒng)結構體那樣子操作)
// 這是視頻信息結構體。包含視頻的 大小 和 時長 struct VideoInfo { double videoSize; double videoDuration; }; typedef struct CG_BOXABLE VideoInfo VideoInfo;// 這是最關鍵的代碼缸沃。去看系統(tǒng)的結構體恰起,你也會發(fā)現(xiàn)系統(tǒng)的結構體也做了這一步操作。 // 自定義結構體的包裝 VideoInfo info; info.videoSize = 2533329.0;// 假設視頻大小為2533329.0 info.videoDuration = 10;// 假設視頻10s NSMutableArray *arrM = [NSMutableArray array]; [arrM addObject:@(info)];// 自定義結構體經(jīng)過CG_BOXABLE之后可以像系統(tǒng)結構體一樣操作趾牧。检盼、 for (NSValue *obj in arrM) { // 從對象中獲取結構體,這里和系統(tǒng)結構體的獲取方法有點差異翘单。 VideoInfo info; [obj getValue:&info]; NSLog(@"size = %lf, videoDuration = %lf", info.videoSize, info.videoDuration); }