【学习ios之路:Objective-C】block块语法.NSDate和NSDateFormatter

一.Block块语法

块语法:可以在函数内部定义匿名函数

格式: ^返回值类型(参数列表){函数体}其中返回值类型可以省略

block简单练习:

①.求两个数的最大值

      //int (^)(int,int)//block类型
         int (^max)(int,int) = ^(int a,int b) {//block的实现体
         
         return a > b ? a : b;
         
         };
         int value = max(4,6);
         printf("%d",value);
②.将一个整数转化为字符串对象
        typedef void (^Exchange)(int);
        Exchange  change = ^(int number) {
            NSString *string = [[NSString alloc] initWithFormat:@"%d",number];
            NSLog(@"%@",string);
        };
        change(5);
③.将一个整数转化为NSMumber 对象
     typedef  NSNumber *(^EXC)(int);
        EXC exchange = ^ NSNumber *(int number) {
            return @(number);
        };
        NSNumber *number = exchange(5);
        NSLog(@"%@",number);
④.传入字符串对象,返回全部大写之后的对象
      typedef NSString *(^UPPER)(NSString *);
        UPPER upperString = ^NSString *(NSString *string) {
            return [string uppercaseString];
        };
        
        NSString *temp = @"sdsdfasdf";
        NSString *num = upperString(temp);
        NSLog(@"%@",num);
⑤实现求OC数组元素的个数,
     typedef NSUInteger (^Count)(NSArray *);
       Count getCount = ^NSUInteger (NSArray *arr) {
            return [arr count];
        };
        NSArray *ar1 = @[@"sadf",@"asdf",@"dsfg",@"fdg"];
        NSUInteger count = getCount(ar1);
        NSLog(@"%ld",count);
⑥.定义一个block,实现两个整数的比较
        typedef NSComparisonResult (^Compare)(int,int);
        Compare compare = ^NSComparisonResult(int a,int b) {
            //return [@(a) compare :@(b)];
            return a > b ? NSOrderedDescending : a == b ?
                                          NSOrderedSame : NSOrderedAscending;
        };
        NSComparisonResult x =  compare(5,6);
        NSLog(@"%ld",x);//-1
⑦.实现两个字符串对象的比较
     typedef NSComparisonResult (^CompareString)(NSString *,NSString *);
        CompareString com = ^NSComparisonResult(NSString *str1,NSString *str2) {
            return [str1 compare:str2];
        };
        NSString *temp1 = @"dasf";
        NSString *temp2 = @"das35f";
        NSComparisonResult tem  = com(temp1,temp2);
        NSLog(@"%ld",tem);
⑧.block实现数组排序

    NSArray *ar = @[@"ads",@"dd",@"ff",@"hh"];
    NSArray *ar1 = [ar sortedArrayUsingComparator:^(id num1,id num2) {
        return -[(NSString *)num1 compare: (NSString *)num2];
    }];
    NSLog(@"%@",ar1);

2.block与局部变量和全局变量的关系

    __block int num = 1; //__block修饰后可以修改局部变量
    void (^addNum)() = ^void() {
      int c = num * 10 ; //block内部可以访问外部的局部变量
        num++; //内部访问到局部变量,但不能修改局部变量.如果用__block修饰,可以修改
        printf("%d",c);
    };
    addNum();

二.NSDate和NSDateFormatter常见应用

①.获取当前零时区的时间

   NSDate *date = [NSDate date];
   NSLog(@"%@",date);
②.获取明天此时的时间

   NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:60 * 60 * 24];
   NSLog(@"%@",tomorrow);
③获取昨天当前的时间
  NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-60 * 60 * 24];
  NSLog(@"%@",yesterday)
④.通过1970/1/1,计算出此时的时间 2014 /12/29
   NSDate *now = [NSDate dateWithTimeIntervalSince1970:
                          (11 * 366 + 33 * 365)* 24 * 3600 + 362 * 24 * 3600];
   NSLog(@"%@",now);
⑤.通过2001/1/1 计算出此时的时间//默认2001/1/1
  NSDate *now1 = [NSDate dateWithTimeIntervalSinceReferenceDate:
                                (3 * 366 + 11 * 365)* 24 * 3600 - 3 * 24 * 3600];
  NSLog(@"%@",now1);
⑥.获取两个时间的时间间隔

   NSTimeInterval interval = [date1 timeIntervalSinceDate:date2];
   //double类型 NSTimeInterval
   NSLog(@"%.1f",interval);
⑦.比较日期的早晚,返回早晚日期
 NSDate *dt1 = [date1 earlierDate:date2];
 NSDate *dt2 = [date1 laterDate:date2];
 NSLog(@"%@",dt1);
 NSLog(@"%@",dt2);
⑧.判断日期是否相同
  BOOL isEqual = [date1 isEqualToDate:date2];
        if(isEqual) {
            NSLog(@"相等");
        } else {
            NSLog(@"不相等");
        }
三.日期格式类NSDateFormatter
①.按照指定的日期格式,将NSDate对象转为日期字符串.
- (NSString *)stringFromDate:(NSDate *)date;
代码如下:

   NSDate *date = [NSDate date];
   //获取当前时间
   NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
   //设置格式.
  //HH ---表示24小时制度,hh---表示12小时制 aa 下午/上午 EEE周二
  [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss EEE aa"];
  /[formatter setDateFormat:@"MM月dd日 EEE aaHH:mm"]; 
  //转换格式 NSString *string =[formatter stringFromDate:date]; NSLog(@"%@",string);


2.按照指定的日期格式,将日期字符串转为NSDate对象
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    NSString *string1 = @"2014年05月01日 10点53分18秒";
    NSLog(@"%@",string1);
    //对于NSDate对象来说,永远都是零时区的时间
   //HH ---表示24小时制度,hh---表示12小时制
  [formatter setDateFormat:@"yyyy年MM月dd日 HH点mm分ss秒"];
  NSDate *date1 = [formatter dateFromString:string1]; NSLog(@"%@",date1);

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。