是否可以在编译时确定声明的块的返回类型?编译器通过基于块内的return语句推断类型来完成它。这个结果也可供程序员使用吗?
例如:
^{
return [NSArray array];
}
由编译器翻译为
^NSArray*(){
return [NSArray array];
}
我想要实现的是一个类似于__typeof__
的宏,但它会返回块返回类型。例如,像DECLARE_BLOCK(myBlock, ^{return [NSArray array];})
这样的宏会扩展为NSArray* (^myBlock)() = ^{...}
。
我能够使用该宏来允许声明灵活的块,类似于auto
中的C++11
构造。
答案 0 :(得分:0)
有一种很简单的方法可以获得返回类型:__typeof__(^{...}())
- 模拟块的调用。
解决方案不是我的,我是在为Kiwi框架(https://github.com/kiwi-bdd/Kiwi/pull/528/files)提交的拉取请求中发现的。