OC基础—NSNumber、NSValue、NSDate

本文详细介绍了OC中NSNumber、NSValue和NSDate的基础应用,包括如何使用NSNumber包装基本数据类型以存储在集合中,NSValue用于结构体的包装,以及如何操作和格式化日期时间。通过实例演示了编译器特性、日期格式化和日期间的运算等关键概念。

------ android培训java培训、期待与您交流! ----------


OC基础—NSNumber、NSValue、NSDate

1. NSNumber

如果我们想把一个基本类型存在集合中,但是集合不可以存储基本数据类型,这个时候就可以使用NSNumber类

我们可以利用NSNumber将基本数据类型包装成一个对象
NSNumber *num = [NSNumber numberWithInt:10];
// 这样就可以放入字典中
NSDictionary *dict = @{
@"name" : @"liye",
@"age" : num
};
这个num就是10,只不过被包装成了NSNumber对象。
NSNumber可以将所有的基本数据类型包装成对象,进而存储到集合中去。
但是如果取出这个num还是NSNumber类型,需要转化成相应的基本类型。
NSNumber *num2 = dict[@"age"];
// 转换成基本数据类型
int a = [num2 intValue];
NSString也有这样的方法:
int a = 20;
NSString *str = [NSString stringWithFormat:@"%d", a];
int b = [str intValue];

但是如果有很多基本数据类型需要存储到集合里,那么使用NSNumber转换也是非常麻烦的,怎么办呢?我们编译器又有了一个特性:
NSArray *array = @[
@{@"age" : [NSNumber numberWithInt:20]},
@{@"age" : @20}
];
我们看,里面两个元素是一样的,在@后面加一个数字,那么编译器自动调用NSNumber方法将他包装成一个对象用来存储,也就是@20 == [NSNumber numberWithInt:20]

下面我们来看一下这个编译器特性:
包装整数:@20
包装小数:@10.5
包装BOOL:@YES
包装字符:@‘A’
包装变量:int age = 100; @(age)

2. NSValue

NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue
NSNumber是有缺陷的,NSNumber只能包装数字,int,double,char这些都是数字。但如果我们想包装结构体呢,就不能是有NSNumber,只能使用NSValue。

任何东西都可以包装成NSValue对象。
结构体也可以:
CGPoint p = CGPointMake(10, 10);
NSValue *value = [NSValue valueWithPoint:p];
这样我们就可以在集合中存储结构体了
不过我们还是要转换成结构体:
CGPoint p1 = [value pointValue];
NSValue 还有很多方法,可以将Point,Size,Rect这些常用的结构体包装成对象用于集合存储

3. NSDate

一个NSDate对象可以表示一个时间。
创建一个NSDate对象
NSDate *date = [NSDate date];
这个date就是当前时间,但是这是0时区的时间(格林时间)。如果想要得得到北京时间那么就要+8小时。

NSDate一些方法的使用:
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
这个方法的意思就是date2这个时间要比date晚5S,Interval就是延迟的意思,而且OC中的基本单位是秒(s)。

NSTimeInterval seconds = [date2 timeIntervalSince1970];
这个表示从1970到date2所走过的秒数。

日期格式化:
我们想要一个date在我们的手机屏幕上显示,那么我们就需要将这个date先转换成字符串,这个时候我们要借助日期格式化类NSDateFormatter。
NSDate *date = [NSDate date];
// 日期格式化类
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// 设定格式
// y 年  M月  d日
// m分  s秒  H(24)时  h(12)时
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *str = [formatter stringFromDate:date]; 

我们知道的一个字符串也是可以转成时间的
NSString *time = @"2011-09-10 18:22";
formatter.dateFormat = @"yyyy-MM-dd HH:mm";
NSDate *date = [formatter dateFromString:time];


------  android培训 java培训 、期待与您交流! ----------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值