zoukankan      html  css  js  c++  java
  • 黑马程序员--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]; 
  • 相关阅读:
    金融新手投标模块布局小Demo
    jQuery序列化Ajax提交表单
    javascript实现jsonp跨域问题+原理
    javascript返回顶部插件+源码
    mime中间件
    移动端meta标签的设置
    Node环境下实现less编译
    diogo谈框,仿prompt()方法布局
    linux驱动程序框架基础
    C/C++下Netbeans的配置
  • 原文地址:https://www.cnblogs.com/waterfox/p/4388857.html
Copyright © 2011-2022 走看看