iOS – 从作为parameter passing的块中获取variables

我已经有一段时间对此感到震惊,但似乎无法find我正在寻找的东西。 基本上我在A类中有下面的方法声明

- (void)doSomethingCoolWithThisBlock:(void (^)(void))block 

在B类中,当我在块部分调用这个方法如下:

 UILabel *myLabel = [[UILabel alloc] init]; UITextField *myField = [[UITextField alloc] init]; 

等等

我的问题是,在我的doSomethingCoolWithThisBlock的实现中,我怎么能剖析块内的东西,并得到说UILabel例如?

简单的答案是你不能; 如果你想传递一个UILabel到方法,它应该带一个types为UILabel *的参数(以及任何你想作为单独parameter passing的东西,或者某种容器types的一个参数 – 可能是你自己定制的协议 -包含所有的东西)。

但是如果你只想从块内传递一个东西,你当然可以让块返回一些东西(例如,把types改成(UILabel *)(^)(void) ,然后在块的末尾return myLabel; )。 更复杂的方法是将块作为参数指向指针的指针(例如, UILabel ** ),然后从块内指派给这些指针,但是看起来这不会有多大意义。