【block作为函数的返回值 Objective-C语言】
移动开发
2022-10-03 21:41:08
阅读次数: 0
一、例如:
在main.m文件中,我这儿有1个函数:
import <Foundation/Foundation.h>
- (void)ttt
{
//code;
}
int main()
{
//code;
}
我这个函数里面,有一个block,void (^block1)(),给它赋1个代码段 ^void (){};
import <Foundation/Foundation.h>
- (void)ttt
{
void (^block1)() = ^ {
NSLog(@“-----------”);
NSLog(@“-----------”);
NSLog(@“-----------”);
};
}
int main()
{
//code;
}
这个时候,这个ttt()函数里面,是不是有1个block1变量啊
我能不能把这个block1变量的值,也就是这个代码段:
^ void () {
NSLog(@“-------------”);
NSLog(@“-------------”);
NSLog(@“-------------”);
};
返回给调用者呢?
可以
那怎么写呢
是不是应该改返回值啊
void ttt()
改成
void (^)() ttt()
这个地方,(^)为什么不写名字
因为我们说过,返回值是不是只要写类型就可以了吧
但是这样写会报错,因为编译器看不懂了,所以如果要把block作为返回值的话,就只能用typedef了
typedef void (^NewType)();
NewType ttt(){
void (^block1)()= ^ {
NSLog(@“---------”);
NSLog(@“---------”);
NSLog(@“---------”);
};
return block1
}
如果说你想把block作为返回值的话,这时候就必须用typedef了啊,用这个短类型的啊
typedef void (^NewType)();
二、当将block作为函数的返回值的时候,返回值的类型就必须要使用typedef定义的短类型
这个时候,怎么去执行呢,执行就很简单了,在main.m文件中
调用这个ttt();函数,这个函数是不是返回block类型的啊,也就是NewType类型的啊
好,来一个type接收一下就可以了
NewType type = ttt();
这个时候,ttt()这个函数就会返回这个block的值
然后把这个block的值赋给type
然后,执行一下这个type里面的代码
type();
输出:
-----------------
-----------------
-----------------
三、block与函数的异同
1.相同点:都是封装1段代码
2.不同点:
1)block是1个数据类型,函数是1个函数
2)我们可以声明block类型的变量,函数就只能是个函数
3)block可以作为函数的参数,而函数不能直接作为函数的参数,除非你用指向函数的指针,但是那个东西基本上用不上了,都用block代替了。
转载自blog.csdn.net/madoca/article/details/126982247