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

曾经面试过一个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的语法)