• Block代码块


    一、block基本语法

    1、定义块必须以^开头

    2、定义块的返回值类型可以省略,而且经常会省略声明块的返回值类型

    3、定义无须制定名字

    4、如果快没有返回值,块无需带参数,通常建议使用void作为占位符

    定义块格式:返回值类型(^block名称)(形参列表)=^(形参列表){};

    代码块可以进行复用,可以反相传值。

    例1:先声明、再实现。

    //block声明格式:返回值声明(^block名字)(形参列表)
    int (^myFun)();
     
    //实现格式:block名字=^(形参列表){};
    myFun =  ^(){
                NSLog(@"这是一个代码块");
                return 1;
            };
     
    //调用:block名称(形参列表),有返回值的block可以用一个变量进行接收。
    int a = myFun();
           
    NSLog(@"%d",a);
     
    例2:
    //有返回值、有形参、声明和实现放在一起

    int (^sumblock)(int a,int b)=^(int a,int b){

                return  a+b;

            };

    //调用

            int sum=sumblock(10,20);

            NSLog(@"sum=%d",sum);

     
    例3:
    //返回类型是字符串格式:  NSString *(^名字)(形参列表)

    NSString *(^charblock)(NSString *s)=^(NSString *s){

                NSLog(@"s=%@",s);

                return  s;

            };

            charblock(@"字符串");

    例4:
    //定义一个局部变量,要在block进行值的改变

    __block int a=0;

            void(^myblock1)()=^(){

                a++;

            };

     
    例5:
    //定义一个全局变量,在block进行值的改变

    static int e;

            void (^myblock3)()=^(){

                e++;

            };

    二、block作为函数的参数调用
     
    例1:

    #import <Foundation/Foundation.h>

    void fun(int(^myblock)(int a,int b)){

        int mul=myblock(4,5);

        NSLog(@"mul=%d",mul);

    }

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

        @autoreleasepool {

            //调用方法1:

            int (^myblock1)(int c,int d)=^(int a,int b){

                return a*b;

            };

            fun(myblock1);

            //调用方法2

            fun(^int(int a, int b) {

                return a*b;

            });

      }

        return 0;

    }

    例2:
    #import <Foundation/Foundation.h>
     
     

    //字符串作为函数调用 方法1

    void fun1(NSString *(^block)(NSString *s)){

        NSString *s=@"这是一个字符串";

        NSLog(@"s1=%@",block (s));

    }

    //字符串作为函数调用 方法2

    void fun2(NSString *(^block2)(NSString *s),NSString *s2){

        NSLog(@"s2=%@",block2(s2));

    }

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

        @autoreleasepool{

    //字符串作为函数调用 方法1

            

            NSString *(^block1)(NSString *s)=^(NSString *s1){

                

                return s1;

            };

            fun1(block1);

            

            

            //字符串作为函数调用 方法2

            fun2(^NSString *(NSString *s) {

                return s;

            }, @"这是一个字符串");

                

        }

        return 0;

    }

     
     
     
     
  • 相关阅读:
    多个DataTable的合并成一个新表
    into #临时表的用法
    触发器获取更新前的数据
    C# 多个CSV文件合并成一个文件
    group by 字段名 with ROLLUP
    删除DataTable重复列,只针对删除其中的一列重复的行(转)
    动态注册jS
    JS 验证
    导出Excel
    C# 导入多个工作薄文件
  • 原文地址:https://www.cnblogs.com/wxzboke/p/4935782.html
Copyright © 2020-2023  润新知