美文网首页iOS面试基础知识点
Block由浅入深(1):Block的语法

Block由浅入深(1):Block的语法

作者: LordLamb | 来源:发表于2017-12-06 14:05 被阅读0次

    曾经面试过一个iOS开发,让他写一个参数是int返回值是void的Block声明,这位同学思考了一会儿只能很尴尬的说不太会写。相信很多iOS开发者刚刚接触到Block的时候,都会对Block的写法有或多或少的疑惑,本文采用一种比较容易理解的方式介绍Block的声明语法、实现语法和省略语法。只要有C语言基础,相信阅读完本文后就能够很轻松的写出无论多么复杂的Block。

    Block的声明语法

    Block的语法其实和C函数指针比较类似,比如下面声明一个返回值为int,名字是add,参数是两个int的C函数指针:
    int (*add)(int, int);
    我们将*修改为^就可以得到一个返回值是int,名字是add,参数是两个int的Block声明:
    int (^add)(int, int);

    Block的实现语法

    Block的实现语法也类似与C函数:

    ^int (int a, int b) {
        return a + b;
    };
    

    C函数:

    int add(int a, int b) {
        return a + b;
    }
    

    我们可以将Block理解为C语言的匿名函数,与C函数相比,Block去掉了函数名,在返回值前加了^。

    Block的省略语法

    我们经常看到下面这种形式的写法:

    ^{ NSLog(@"hello world"); };
    

    这是因为Block的返回值是void或者参数是void的时候,可以省略返回值或者参数,上面的Block相当于:

    ^void (void) { NSLog(@"hello world"); };
    

    当然下面这种形式的Block也是合法的:

    ^ (int a) { a++; };
    ^int { return 0; };
    

    相关文章

      网友评论

        本文标题:Block由浅入深(1):Block的语法

        本文链接:https://www.haomeiwen.com/subject/cxnkixtx.html