【block的简写 Objective-C语言】

一、关于block的简写

1.如果我们写的代码段没有返回值,例如:

void (^myBlock1)() = ^void(){

NSLog(@“大家好。”);

NSLog(@“我是人。”);

};

这段代码没有返回值啊,返回值是void啊,这时候,后面这个void可以省略掉,写成:

void (^myBlock1)()= ^(){

NSLog(@“大家好。”);

NSLog(@“我是人。”);

};

如果我们写的代码段没有返回值,那么代码段的void可以省略

但是,友情提示,前面那个void能省略吗,不能,我说的是代码段的返回值

注意:我说的是代码段的返回值,如果是void,可以省略,声明block变量的返回值,无论是什么,都不可以去省略

2.如果我们写的代码段,没有参数,那么代码段的小括弧,也可以省略

例如:

int (^myBlock2)() = ^int(){

int num1 = 10 + 20;

return num1;

};

你看这段代码,第一个,有没有返回值啊,有,所以这个代码段的int能不能省略,不能

有没有参数,没有参数,所以代码段的小括弧,可以省略

写成:

int (^myBlock2)() = ^int{

int num1 = 10 + 20 ;

return num1;

};

注意:我说的是代码段的小括弧,如果没有返回值,可以省略,前面那个声明block变量的小括弧能不能省略,不能

再次强调,我们说的是代码段

所以,我们的代码段如果既没有参数,也没有返回值,都可以省掉

例如:

void (^myBlock1)() = ^void(){

NSLog(@“大家好。”);

NSLog(@“我是人。”);

};

可以写成:

void (^myBlock1)() = ^{

NSLog(@“大家好。”);

NSLog(@“我是人。”);

};

所以,当1个代码段既没有参数,也没有返回值的时候,就只写^

3.刚刚我们说的两种block的简写方式,都是说的代码段啊,现在我们说声明block变量

声明这个block变量的时候,如果有指定参数,可以只写参数的类型,而不写参数的名称;

例如:

int (^myBlock3)(int num1,int num2) = ^int(int num1,int num2){

int num3 = num1 + num2;

return num3;

};

可以写为:

int (^myBlock3)(int, int) = ^int(int num1,int num2){

int num3 = num1 + num2;

return num3;

};

注意:现在我们说的是声明block变量的时候,参数名称可以省略,后面那个代码段的参数名称能不能省略啊,不能,省略之后,你在代码段里怎么用这个参数呢

注意:这个地方我们说的是声明block变量的时候,在写代码段的时候,类型和名称都要写

4.刚才我们说的是不是如果代码段没有返回值,代码段的返回值类型可以省略啊,实际上,无论代码段有没有返回值,返回值类型都可以省略

无论代码段是否有返回值,在写代码段的时候,可以不写返回值类型 , 省略

例如:

int (^myBlock3)(int,int) = ^int(int num1,int num2){

int num3 = num1 + num2;

return num3;

};

可以写为

int (^myBlock3)(int,int) = ^(int num1,int num2){

int num3 = num1 + num2;

return num3;

};

那么这个是什么原理

如果我现在不写这个代码段的返回值,那么这个代码段的返回值是自动确定的

如果在写代码段的时候,省略了返回值,这个时候,系统会自动的确定返回值的类型,它怎么确定的能,是看代码段里面有没有return

如果代码段是这么写的

^(int num1,int num2){

int num3 = num1 + num2;

};

那么系统会认为这个代码段的返回值是void,因为你没有返回任何数据嘛

如果你写个这样的

^int(int num1,int num2){

int num3 = num1 + num2;

return num3;

};

那么它会认为这个代码段的返回值是int类型的

如果写个return 12.12;

那么它会认为这个代码段的返回值是double类型的。

如果代码段没有任何return语句,那么它会认为这个代码段是没有返回值的

如果代码段有return语句,返回的数据是什么类型,它就会认为这个代码段是什么类型

二、建议大家:

1.不要去简写,还是按照我们最标准的方式来写,因为这样的话,代码的阅读性才高一些

2.建议:仍然按照我们最标准的写法来写block变量和block代码段,因为这样可以提高代码的阅读性

例如:

虽然可以这样写:

void (^myBlock1)() = ^{

NSLog(@“大家好。”);

NSLog(@“我是人。”);

};

但是还是建议这样写:

void (^myBlock1)() = ^void(){

NSLog(@“大家好。”);

NSLog(@“我是人。”);

};

猜你喜欢

转载自blog.csdn.net/madoca/article/details/126789512