一.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- (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);
【学习ios之路:Objective-C】block块语法.NSDate和NSDateFormatter
原文:http://blog.csdn.net/zfx5130/article/details/42466071