标签:
返回值类型(^block变量名)(block参数列表)=block功能的实现
block功能的实现:^(参数列表){在这里实现功能};
//block类型 :int (^)(int , int)
//block变量: sum
//block实现:^(int a , int b){return a + b;};
//两个数的和
int (^sum)(int , int) = ^(int a , int b){
return a + b;
};
int c = sum(4 , 8);
NSLog(@"%d" , c);
// 实现三个数最大值
int (^max)(int , int , int) = ^(int x , int y , int z){
return x > y ? (x > z ? x : z) : (y > z ? y : z);
};
int m = max(4 , 2 , 8);
NSLog(@"%d" , m);
//定义一个block,将 NSNumber变成NSInteger
NSInteger (^a)(NSNumber *) = ^(NSNumber *b){
return [b integerValue];
};
// NSNumber *num = [NSNumber numberWithInteger:6];
// NSInteger result = a(num);
// NSLog(@"%ld" , result);
NSLog(@"%ld" , a(@(46)));
//将整形转换NSNumber
NSNumber * (^change)(NSInteger) = ^(NSInteger a) {
return @(a);
// return [NSNumber numberWithInteger:a];
};
NSLog(@"%@" , change(55));
//整形转换NSString
NSString * (^change)(NSInteger) = ^(NSInteger a){
return [NSString stringWithFormat:@"%ld" , a];
};
NSLog(@"%@" , change(34));
//计算两个NSNumber对象的和
NSNumber * (^add)(NSNumber * , NSNumber *) = ^(NSNumber *a , NSNumber *b){
return @([a integerValue] + [b integerValue]);
};
NSLog(@"%@" , add(@(4) , @(7)));
//字符串转换为整形
NSInteger (^change)(NSString *) = ^(NSString *p){
return [[NSString stringWithString:p] integerValue];
};
NSLog(@"%ld" , (long)change(@"45"));
// 比较两个整数
NSComparisonResult (^comp)(int , int) = ^(int a , int b){
// if (a > b) {
// return NSOrderedDescending;
// } else if (a < b){
// return NSOrderedSame;
// }
// else {
// return NSOrderedAscending;
// }
NSNumber *number1 = [NSNumber numberWithInt:a];
NSNumber *number2 = [NSNumber numberWithInt:b];
return [number1 compare:number2];
};
NSLog(@"%ld" , comp(3 , 7));
//比较两个字符串
NSComparisonResult (^comp)(NSString * , NSString *) = ^(NSString *a , NSString *b){
return [a compare:b];
};
NSLog(@"%ld" , comp(@"qingtao" , @"wangyukai"));
//block 初级用法
// block块,块体的内容第一次不会走,当有东西使用到这个block块的时候,block块 块体里面的内容才会走
//在block块内,想修改一个局部变量,必须把要修改的变量声明为__block类型
//在block块内,修改一个全局变量,直接可以修改
//block 类型 的重定义
int a = 6;
//定义一个block ,打印变量的5倍
void (^myBlock)(int) = ^(int b){
NSLog(@"%d" , 5 * b);
};
//block功能已实现,开始使用这个block块
myBlock(a);
// __block int b = 7;
//让变量自增1,并打印输出
// void (^myblock)(int) = ^(int a){
// a++;
// NSLog(@"%d" , a);
// };
void (^myblock)(void) = ^(void){
b++;
NSLog(@"%d" , b);
};
myblock();
// typedef NSComparisonResult (^comp)(NSString * , NSString *);
//此时的comp从变量升级为类型,不再代表一个变量,而是一种类型
//block 高级用法
//block配合数组来实现高级用法
NSArray *array1 = @[@"ghjk" , @"rtyui" , @"asdfghj" , @"bnm" , @"fghjk"];
NSLog(@"%@" , array1);
//开始对数组进行生序排序
//通过方法进行排序
NSArray *array2 = [array1 sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@" , array2);
//通过block进行排序
//oc数组排序
//内部封装了排序的操作,我们所需要做的就是,告诉数组是升序还是降序
//也就是给定两个数组中的两个元素比较所使用的方法即可
NSArray *array3 = [array1 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return -[obj1 compare:obj2];//降序-
}];
//自定义block
NSComparisonResult (^myDescendingBlock)(id , id) = ^NSComparisonResult(id obj1 , id obj2){
return -[obj1 compare:obj2];
};
NSArray *array3 = [array1 sortedArrayUsingComparator:myDescendingBlock];//不需要传参数
NSLog(@"%@" , array3);
NSComparisonResult (^myDescendingBlock)(id , id) = ^NSComparisonResult(id obj1 , id obj2){
return -[@([((Person *)obj1) getAge]) compare:@([((Person *)obj2) getAge])];
};
标签:
原文地址:http://www.cnblogs.com/fengkuangIT/p/4489523.html