OC-代码块的运用

/**

 *  代码块

 *把一段代码当做一个变量用

 *button.onClick=代码块;

 * 动态决定执行的代码

 */

//1.block的类型:返回值,参数类型

//a+aa+aaa..(n )

//定义block类型时,可以不使用形参参数名

//block类型可以定义多个block变量

typedef int (^SuperAdd)(int a,int n);

//没有返回值,但是有参数

typedef void (^ Say)(NSString *);

//没有参数也没有返回值

typedef void (^Test)(void);

//做一个计算器

typedef int  (^Fac)(int a,int b);

// int (^Fac ) (int a,int b) 起别名

typedef int  (^Add)(int n);

//写一个计算器函数,他可以有加减乘除的功能!

//具体怎么计算,让使用者来决定

//fac就是一段代码

int facfac( int a ,int b,Fac fac)

{

    int result = fac(a,b);//fac(a,b)调用参数block

    

    return result;




}




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

{

    //1.定义一个block变量

    SuperAdd aa= ^(int a ,int n){

        int sum=0;

        int fac=0;

        for (int i=0; i<n; i++) {

            fac=fac*10+a;

            sum=sum+fac;

        }

        return sum;

    };

    

    //2.调用block,类比函数需要使用()和参数(如果有的话)

    

    int rst=aa(2,3);

    

    NSLog(@"%d",rst);

   

  //  3.同一个block类型,不同的实现


    SuperAdd cc=^( int a ,int n){

        int sum=0;

        sum=a*a+n*n;

        return sum;

    

    };

    int rst2=cc(1,2);

    NSLog(@"%d",rst2);

    

    //4.没有返回值,但是有参数的block类型

    Say ss=^(NSString *str){

    

        NSLog(@"str=%@!",str);

    };

    //测试,没有返回值得block变量.

    

    ss(@"我是你大爷!");

    

    //5.没有参数,也没有返回值的block类型

    //注意没有参数圆括号可以省略

    Test tt=^(){NSLog(@"kongkongkong");};

    

    tt();

    Test tt2=^(){NSLog(@"kong ni da ye a ");};

    

    

    tt2();

    

    //6.计算器的具体计算规则实现

    //(1.)加法的实现规则

    Fac add=^(int a ,int b){

        

        NSLog(@"a+b=%d",a+b);

        return a+b;

    };

     //(2.)减法的实现规则

    Fac minus=^(int a ,int b){

        

        NSLog(@"a-b=%d",a-b);

        return a-b;

    };

    

    //(2.)乘法的实现规则

    Fac times=^(int a ,int b){

        

        NSLog(@"a*b=%d",a*b);

        return a*b;

    };

    

    //(2.)初法的实现规则

    Fac divide=^(int a ,int b){

       

            NSLog(@"a/b=%d",a/b);

        return a/b;

    };

    

    //6.调用计算器函数,传入不同的计算代码

    

    

    facfac(100, 100, add);

    facfac(99, 98, minus);

    facfac(88, 2, times);

    facfac(88, 44, divide);

    

    

    //练习1:使用block,计算1+2+3+4.....,参数是n

    

    Add jiajia=^(int n){

        int sum=0;

        for (int i=1; i<=n; i++) {

            sum=sum+i;

           

        }

       

     

       return sum;

    };

    int count=jiajia(5);

      NSLog(@"1+2+3+....n=%d",count);

    //练习2:使用block计算1!+2!+3!+....,block类型和练习相同

    

    Add chengcheng=^(int n){

        

        int sum=0;

        int fac=1;

        for (int j=1; j<=n; j++){

            fac=fac*j;

            sum=sum+fac;

            }

        

       

        return sum;

    };

    

   int cheng=  chengcheng(5);

    NSLog(@"1!+2!+3!+....n=%d",cheng);

    

    

    

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值