说明:
OC是对C语言的拓展,增加了面向对象的思想,且兼容C语言。在OC中数组里只能存放OC的对象,不能存放C语言中的基本数据类型。之前使用NSNumber类将C语言的基本数据转化为OC中的对象,但是C语言中的结构体确不能使用NSNumber对象转化,要使用NSValue对象才能把它转化为OC对象。
code:
NSRange range = {1,20};
//报错:Collection element of type 'NSRange' (aka 'struct _NSRange') is not an Objective-C object
//NSArray *array = @[range,@"123"];
//NSRange 转化为NSValue
NSValue *value = [NSValue valueWithRange:range];
//NSArray *array = @[value, @"12"]; 成功放入数组
NSRange range1;
//NSValue->NSRange
[value getValue:&range1];
NSLog(@"%ld,%ld", range1.length, range.location);
struct dog{
NSInteger age;
NSInteger weight;
};
struct dog d = {1,40};
//自定义结构体->NSValue
//@encode 将一个C语言的基本类型转换为字符串
NSValue *valueDog = [NSValue value:&d withObjCType:@encode(struct dog)];
struct dog d2 ;
//NSValue->自定义结构体
[valueDog getValue:&d2];
NSLog(@"%ld, %ld", d2.age, d2.weight);