我一直在敲打这个问题一段时间,但似乎无法找到我想要的东西。基本上我在A类中有以下方法声明。
- (void)doSomethingCoolWithThisBlock:(void (^)(void))block
在B类中,当我在块部分中调用此方法时,如下所示:
UILabel *myLabel = [[UILabel alloc] init];
UITextField *myField = [[UITextField alloc] init];
等
我的问题是,在我的doSomethingCoolWithThisBlock
的实现中,我如何剖析块内的内容并以UILabel为例?
答案 0 :(得分:3)
简短的回答是你做不到;如果你想将UILabel
传递给方法,它应该采用UILabel *
类型的参数(以及你想作为单独的参数传递的任何其他东西,或某种容器类型的一个参数 - 可能是你自己的自定义协议 - 包含所有的东西。)
但是如果您只想从块中传递一个东西,您当然可以使块返回某些东西(例如,将类型更改为(UILabel *)(^)(void)
然后在结束时块做return myLabel;
)。更复杂的方法是使块作为指针的参数指针(例如,UILabel **
)然后从块内分配给那些,但看起来这看起来不太合理。