zoukankan      html  css  js  c++  java
  • 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;

    }

     
     
     
     
  • 相关阅读:
    杂记
    [POI2015]PUS
    CF786B Legacy(线段树优化建图)
    SP11470 TTM
    [WC2010]重建计划
    [HNOI2014]世界树
    luogu P4842 城市旅行
    [SDOI2016]征途
    [APIO2014]序列分割
    上下界网络流构图证明
  • 原文地址:https://www.cnblogs.com/wxzboke/p/4935782.html
Copyright © 2011-2022 走看看