【block的简写 Objective-C语言】
移动开发
2022-10-03 21:42:38
阅读次数: 0
一、关于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