码迷,mamicode.com
首页 > 其他好文 > 详细

block

时间:2015-05-09 11:39:24      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:

         返回值类型(^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])];

        };

 

block

标签:

原文地址:http://www.cnblogs.com/fengkuangIT/p/4489523.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!