您的位置:首页 > 产品设计 > UI/UE

OC-052.NSValue 结构体类型的包装类

2015-12-16 16:33 501 查看
OC中集合类中只能存储OC对象不能存储基本数据类型和结构体

存储结构体:结构体 -> 包装类型(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: