------IOS培训期待与您交流! -------
Foundation的其他常用的类:NSNumber,NSDate
一、NSNumber
这个类主要是用来封装基本类型的,OC 中的集合是不允许存入基本类型的,所以NSNumber类就诞生了,需要将基本类型封装一下,然后存进去。
从这一点上我们就可以看出NSNumber是很重要的,后面一定会经常用到。
1、封包和解包
// 创建NSNumber // 封包 NSNumber *intNumber = [NSNumber numberWithInt:3]; NSNumber *floatNumber = [NSNumber numberWithFloat:9.8f]; NSArray *array = @[intNumber,floatNumber]; // 优化语法 NSNumber *intNumbers = @12; // 解包 int value = [intNumber intValue]; float values = [floatNumber floatValue]; NSString *str = [intNumber stringValue];
NSNumber类中有基本类型对应的方法,可以这么操作的,不过值得一提的是:
NSString *str = [intNumber stringValue]; NSLog(@"%@",str);
我们看到,intNumber是用包装int类型的,但是我们可以使用stringValue方法进行解包,这个就相当于int类型转化成NSString类型了。
3、结构体类型的自动封包和解包
// 将结构体存入到数组中,使用NSValue对结构体进行封装 // NSValue是NSNumber的父类 // 封包 NSRange rang = {1,3}; NSValue *v = [NSValue valueWithRange:rang]; // 解包 rang = [v rangeValue];
在OC中还有一个结构体类型,他也是不能直接存入到集合类中的,对他进行封装的时NSValue类,不是NSNumber类了。
4、对自定义结构体类型进行自动封包和解包
// 对自定义的结构体进行封包 struct WXPoint{ float x; float y; }; struct WXPoint p = {50,100}; // 第一个参数是结构体的变量地址,第二个参数是类型 NSValue *v1 = [NSValue value:&p withObjCType:@encode(struct WXPoint)]; // 解包 struct WXPoint p1; [v1 getValue:&p1];
对于自定义的结构体类型,我们在封包的时候需要使用value:withObjCType:方法来进行操作了。
需要使用@encode(struct WXPoint)传递进去,这个作用就是相当于把结构体类型传递过去。
5、对空值进行封装
//数组中是没有办法存放一个空对象的nil NSNull *n1 = [NSNull null]; NSNull *n2 = [NSNull null]; NSArray *nullArray = @[n1,n2]; NSLog(@"nullArray =%@",nullArray);
二、NSDate
这个类是OC中操作日期的类。
1、创建一个日期(默认是当前时间)
// 创建日期 NSDate *date = [NSDate date];//代表当前的时间点 NSDate *date1 = [[NSDate alloc] init]; NSLog(@"%@",date);
2、增减时间点
date1 = [NSDate dateWithTimeIntervalSinceNow:1000];// 单位是秒,在当前时间加上1000s,如果是减去一个时间,直接使用负值就可以了 NSLog(@"%@",date);
3、从1970年开始到现在的时间戳
NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:1000];
4、创建一个日期,然后获取他的时间戳
// 创建一个日期 NSDate *now = [NSDate date]; NSTimeInterval interval = [now timeIntervalSince1970]; interval = [now timeIntervalSinceNow];// 到当前时间的一个差值
5、日期的比较
//通过调用日期对象的compare,或者通过两个日期之间的差值判断 NSComparisonResult result = [date compare:date1]; if(result == NSOrderedAscending){ //大于 }else if(result == NSOrderedDescending){ //小于 }else{ //等于 }
6、日期的格式化(日期转化成字符串)
// 日期格式化 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSString *str = [dateFormatter stringFromDate:date]; NSLog(@"%@",str);
7、将字符串转化成日期