黑马程序员--Foundation框架之--类其他常用的类:NSNumber,NSDate

 

------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、将字符串转化成日期

 
// 将字符串转化成日期对象  
NSString *strs = @"2013年12月14日 16:31:08";  
[dateFormatter setDateFormat:@"yyyy年MM月dd日 HH:mm:ss"];  
date1 = [dateFormatter dateFromString:strs]; 
原文地址:https://www.cnblogs.com/waterfox/p/4388857.html