block的动态传值例子

时间:2023-03-10 02:30:28
block的动态传值例子

/*
  写一个block传值  ,让两个数进行相除和相乘,在运行时动态决定采用哪种计算方式
 */

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {

typedef int(^MathBlock)(int,int);
        MathBlock  sumblock = ^(int a,int b){
            return a+b;
        };
        MathBlock  delblock = ^(int a,int b){
            return a-b;
        };
        
        typedef void (^Myblock)(MathBlock,int,int);
        //int(^MathBlock)(int,int) 是MathBlock的形式参数 *****int*********
        Myblock block= ^(int(^MathBlock)(int,int),int a,int b)
        {
            NSLog(@"%d",MathBlock(a,b));
        };
        
        
        block(sumblock,1,2);
        block(delblock,2,1);
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    //        void (^block)(char,int,int)=^(char a ,int b,int c){
    //            if(a=='+')
    //            {
    //                NSLog(@"%d",b+c);
    //            }
    //            if(a=='-')
    //            {
    //                NSLog(@"%d",b-c);
    //            }
    //        };
    //        //+
    //        block('+',2,4);
    //        //-
    //        block('-',4,2);
    
    
    
    
    
    
    
    
    
    
    
    
    //        void (^block)(int(^MathBlock)(int,int),int,int) = ^(int(^MathBlock)(int,int),int a,int b)
    //        {
    //            NSLog(@"%d",MathBlock(a,b));
    //        };
    //        block(sumblock,1,2);
    //        block(delblock,2,1);
    
    
    return 0;
}