Objective C - 在编译时确定块返回类型

时间:2014-05-08 20:40:33

标签: objective-c objective-c-blocks

是否可以在编译时确定声明的块的返回类型?编译器通过基于块内的return语句推断类型来完成它。这个结果也可供程序员使用吗?

例如:

^{
    return [NSArray array];
}

由编译器翻译为

^NSArray*(){
    return [NSArray array];
}

我想要实现的是一个类似于__typeof__的宏,但它会返回块返回类型。例如,像DECLARE_BLOCK(myBlock, ^{return [NSArray array];})这样的宏会扩展为NSArray* (^myBlock)() = ^{...}

我能够使用该宏来允许声明灵活的块,类似于auto中的C++11构造。

1 个答案:

答案 0 :(得分:0)

有一种很简单的方法可以获得返回类型:__typeof__(^{...}()) - 模拟块的调用。

解决方案不是我的,我是在为Kiwi框架(https://github.com/kiwi-bdd/Kiwi/pull/528/files)提交的拉取请求中发现的。