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

OC中的NSNumber、NSValue

2015-11-01 03:12 489 查看

NSNumber

OC中集合类中只能存储OC对象不能存储基本数据类型

如果要存储对基本数据类型进行包装

存储基本数据类型

1. 基本数据类型 -> 包装类型(NSNumber) -> 存入集合类

2. 从集合中取出包装类型 -> 包装类型(NSNumber) -> 基本数据类型

NSNumber的使用

int main(int argc, const char * argv[]) {
@autoreleasepool {
//      基本数据类型转包装类型
NSNumber *number = [NSNumber numberWithInt:19];
number = [NSNumber numberWithFloat:10.1f];
number = [NSNumber numberWithDouble:10.10];
number = [NSNumber numberWithBool:YES];
//      包装类型转基本数据类型
int i =  number.intValue;
number.floatValue;
number.doubleValue;
number.boolValue;
//      快速创建NSNumber对象
number = @1;
number = @1.1;
number = @1.2f;
}
return 0;
}


NSValue

NSNumber实际上是NSValue的子类,NSValue可以封装任意值。你可以将NSValue将结构体放入NSArray、NSDictionary

int main(int argc, const char * argv[]) {
@autoreleasepool {
//      结构体转包装类型
NSRange range = {1,20};
NSValue *value = [NSValue valueWithRange:range];
NSPoint point =  CGPointMake(1.2,10.2);
NSValue *value2 = [NSValue valueWithPoint:point];
NSSize size  = CGSizeMake(10, 20);
NSValue *value3 = [NSValue valueWithSize:size];
NSRect rect = CGRectMake(10, 10, 20, 20);
NSValue *value4 = [NSValue valueWithRect:rect];
//      自定义的结构体转NSValue
typedef struct {
int year;
int month;
int day;
} ZZDate;

ZZDate date = {2014,12,5};

NSValue *value5 = [NSValue valueWithBytes:&date objCType:@encode(ZZDate)];
NSLog(@"%@",value5);
//      包装类型转结构体
ZZDate d1;
[value5 getValue:&d1];
NSLog(@"%d,%d,%d",d1.year,d1.month,d1.day);

NSRange r1;
[value getValue:&r1];
NSLog(@"%lu,%lu",(unsigned long)r1.length,(unsigned long)r1.location);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  objective-c