【发布时间】:2014-01-06 18:26:04
【问题描述】:
我想知道两件事:
1- 是否可以通过objective-c的自省来知道一个block的返回类型。
例如:int (^CountBlock)(NSArray *array) 我想知道它将返回的类型是int。
第二个问题是:
2- 我可以持有对通用块的引用吗?我的意思是,基本上我可以做类似id myBlock 之类的事情,并回答第一个问题。
我尝试了什么
这种东西是不可能的:
id aBlock = ^{
NSString * aString = @"OMG";
return aString;
};
aBlock();
正如编译器看到的那样,id aBlock 不是函数或函数指针。
【问题讨论】:
-
这可能有助于#1 realmacsoftware.com/blog/…
-
@Cy-4AH 关键是要知道通用块的返回类型。 (问题2)
-
您是否有想要解决的特定用例,或者您只对技术上可行的事情感兴趣?如果它是针对特定用例的,那么我建议您将您的解决方案重新考虑为内省块,并且将它们强制转换不是一个好主意。但是,如果您只想了解技术上的可能性,那么我鼓励您做尽可能多的疯狂事情!
-
我不认为这有资格作为答案,但您可能会感兴趣:github.com/fjolnir/Tranquil/blob/master/Source/Tranquil/Runtime/… 这是一个包装任意块并生成一个包含所有对象参数的类,这些参数被拆箱为原始块想要的任何参数。 (它采用的编码格式为 )
标签: ios objective-c block introspection