OC中集合类中只能存储OC对象不能存储基本数据类型和结构体
存储结构体:结构体 -> 包装类型(NSValue) -> 存入集合类
存储结构体:结构体 -> 包装类型(NSValue) -> 存入集合类
取出结构体:从集合中取出包装类型 -> 包装类型(NSValue) -> 结构体
创建和提取的方法:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//******1.系统自带的结构体转包装类
//1.1系统自带的结构体
NSRange range = {1,2};
NSValue *value1 = [NSValue valueWithRange:range];
CGRect rect = CGRectMake(1, 2, 3, 4);
NSValue *value2 = [NSValue valueWithRect:rect];
CGSize size = CGSizeMake(1, 2);
NSValue *value3 = [NSValue valueWithSize:size];
CGPoint point = CGPointMake(1, 1);
NSValue *value4 = [NSValue valueWithPoint:point];
//1.2自定义的结构体
typedef struct{ //自定义一个结构体
int year;
int month;
int day;
} LSDate;
LSDate date = {2015,12,16};//初始化
//使用下面的类方法返回,注意前面是结构体变量的地址,加&,后面是结构体类型的char,通过@encode转成char *
NSValue *value5 = [NSValue valueWithBytes:&date objCType:@encode(LSDate)];
NSLog(@"%@",value3);
//******2.包装类转结构体
//2.1系统自带的转换
range = value1.rangeValue;
NSRect rect2 = value1.rectValue;
// value1.sizeValue;
// value1.pointerValue;
//2.2自定义结构体的转换
LSDate birthday;
[value5 getValue:&birthday]; //让实参得到包装的值
NSLog(@"%d,%d,%d",birthday.year,birthday.month,birthday.day);
}
return 0;
}