iOS - 从作为参数传递的块内获取变量

时间:2012-11-26 02:22:14

标签: objective-c ios cocoa-touch cocoa objective-c-blocks

我一直在敲打这个问题一段时间,但似乎无法找到我想要的东西。基本上我在A类中有以下方法声明。

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

在B类中,当我在块部分中调用此方法时,如下所示:

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

我的问题是,在我的doSomethingCoolWithThisBlock的实现中,我如何剖析块内的内容并以UILabel为例?

1 个答案:

答案 0 :(得分:3)

简短的回答是你做不到;如果你想将UILabel传递给方法,它应该采用UILabel *类型的参数(以及你想作为单独的参数传递的任何其他东西,或某种容器类型的一个参数 - 可能是你自己的自定义协议 - 包含所有的东西。)

但是如果您只想从块中传递一个东西,您当然可以使块返回某些东西(例如,将类型更改为(UILabel *)(^)(void)然后在结束时块做return myLabel;)。更复杂的方法是使块作为指针的参数指针(例如,UILabel **)然后从块内分配给那些,但看起来这看起来不太合理。