Objective-c - block变量的声明和初始化

时间:2023-01-09 19:47:25

/* 

 Objective-c - block


    1> block类型的变量的声明:

 

        block:是一种数据类型,如同其他数据类型一样,我们可以声明一个block类型的变量用来存储数据.

 

        block类型的变量是专门用来存储一段代码的,这段代码可以有参数也可以有返回值.

        

        在声明block类型的变量的时候,必须指定这个block变量中可以存储的代码的参数和返回值描述,并且这个block变量中只能存储符合描述的代码,其他代码是无法存储的.

 

 

    2> block变量声明的语法:

        

        返回值类型 (^block变量名称)(参数列表)

 

        1:

        void(^firstBlock)();

        :声明了一个名称叫做firstBlockblock类型的变量,并且这个变量中只能存储没有参数,没有返回值的一段代码.

 

        2:

        int(^firstBlock)(int num1, int num2);

        :声明了一个名称叫做firstBlockblock类型的变量,并且这个变量中只能存储返回值为int类型且有两个int类型的参数的一段代码.

 

        一个block变量中只能存储和这个block变量要求相同的一段代码.

 

 

    3> block变量的初始化

 

        原理:

            写一段符合声明的block变量要求的代码,将这段代码存储到这个block变量中.

 

        语法格式:

            ^返回值类型(参数列表)

            {

                代码;

            };

        1:

        //声明一个block变量

        void(^firstBlock)();

        //初始化

        firstBlock = ^void()

                    {

                        NSLog(@"大家好!");

                    };

        //代表名字叫firstBlock的变量中存储了一段代码.

 

         2:

         //声明一个block变量

         int(^firstBlock)(int num1, int num2);

         //初始化

         firstBlock = ^int(int num1, int num2)

                     {

                        int sum = num1 + num2;

                        return sum;

                     };

         //代表名字叫firstBlock的变量中存储了一段代码.

 

 

    4> block代码块的调用执行

        

            语法格式:

                变量名();

                :有参数就传参数,有返回值就接收.

 

 

    如下代码:

 

 */


#import <Foundation/Foundation.h>


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

   

    //声明一个无参数无返回值的block类型的变量并初始化

    void(^firstBlock)() = ^void(){

        NSLog(@"大家好!");

    };

    

    //声明一个有参数有返回值的block类型的变量并初始化

    int(^sumBlock)(int num1,int num2) = ^int(int num1,int num2){

        int sum = num1 + num2;

        return sum;

    };

    

    //调用

    firstBlock();

    

    NSLog(@"10 + 20 = %d", sumBlock(10,20));

    return 0;

}