zoukankan      html  css  js  c++  java
  • block iOS 块

    block 是个很陌生的东西啊。以前没有学会,现在再看它,还是觉得很稀奇古怪。

    无奈,之后硬着头皮学了。。

    //有参返回值

    格式:

    返回值类型 (^变量名)(参数类型及个数) = ^(形参列表){

    代码块语句;

    return;

    };

    eg:

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

                return a+b;

            };

            

            NSLog(@"%d",plus(2,3));

    1.返回值类型是int;

    2.变量名是plus;

    3.参数类型是int,个数,就是使用逗号隔开;

    4.在后面,形参也是要分别都写出来的;

    5.在大括号里面把要写的语句加上;

    6.最后使用分号,以示结束;

    7.调用时,block方法后面要添加().

    这样就相当于公式吧。以前不求甚解,现在求也求不通。

    对于无返回值的block,就是没有返回值的,可以分为有参数和没有参数两种。

    只是单纯地去执行里面的语句。我是这么理解的。

    有参无返回值:

    格式:

    void(^变量名)(参数类型及个数) = ^(形参列表){

    代码块语句;

    };

    eg:

    void (^myblock1)(int,int) = ^(int a, int b){

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

            };

            

            myblock1(1,2);

    无参有返回值

    格式:

    void (^block变量名)() = ^(){

      代码块的语句;

    };

    优化:

    void (^block变量名)() = ^{

      代码块语句;

    };

    void(^myBlock4)()=^{

      NSLog(@"我很好");

    };

    总结了上面的以后,觉得清晰了很多。在UI里面也会用到传值。以后在工作中要多总结、多实践。

    光说不练假把式。。

    补:

     typedef 忘写了。。

    typedef,其实是把block定义为了一个类型。当同一类型有多种不同的变量的时候,这个就方便多了。

    typedef void (^Block)();

    ----相当于定义了一个Block类型。我们可以随便定义这个类型的变量了。

    Block b1 = ^{

     NSLog(@"helloWorld");

    };

    b1();

    //定义有参数/返回值的block类型

    //定义新的别名

    //返回值是int,有两个int类型的参数

    typedef int (^NewType)(int,int);

    NewType new1 = ^(int a,int b){

      return a+b;

    };

    //连续定义多个NewType类型的变量

    NewType new2,new3,new4;

    new1 = ^(int x,int y){

      return x>y?x:y;

    };

    int s = new1(2,3);

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

    相对来说,还是很方便快捷的。

  • 相关阅读:
    [模板]LCA
    洛谷 P1103 书本整理(动规)
    [模板]KMP字符串匹配
    [模板]优先队列(堆)
    Java面试题10(如何取到set集合的第一个元素)
    Java集合操作类Collections的一些常用方法
    本机不装Oracle,使用plsql连接远程Oracle的方法
    ORACLE配置tnsnames.ora文件实例
    JS正则表达式验证数字
    diea破解
  • 原文地址:https://www.cnblogs.com/tanglimei/p/4601230.html
Copyright © 2011-2022 走看看