2014-11-04 107 views
0

我想定义类似的NSArray enumerateObjects块:usingBlock什么是正确的语法

我的块如下

typedef void (^MyBlock)(BOOL *); 

,我想调用它的一些方法,这样的方法会给我布尔值停止

我该如何继续从这里?

编辑:

我想要做以下

BOOL replaceSomething; 

[self someMethod:MyBlock(&replaceSomething)] < ==这个语法是不正确的

if(replaceSomething){ 
do something 
} 



-(void)someMethod:^void(BOOL *stop){ 
*stop = YES; 
} 
+0

您的'MyBlock'期望_two(2)_参数,不仅_one(1)_;第一个参数是'id';第二个参数是一个指向BOOL的指针。当你调用你的块时,你只传递_one(1)_参数,仅仅是第二个参数 - 这在句法上确实是不正确的。 (旁边我不知道你在这里真正质疑...) – holex 2014-11-04 14:25:55

+0

我想调用一些方法,它不是我的方法,它是一个委托方法,因为东西发生在我的控制之外,我想要给定的方法告诉我是否根据给定参数的设置来执行某些操作。被调用的方法显示一个alertview,我要求用户告诉我一些东西 – 2014-11-04 14:30:55

+0

我想你必须提供更多关于当前环境的细节,因为你所要求的是非常含糊的;我可以考虑一个你不能做的情景,我可以考虑另一个可能完成的情景。因此,请提供有关正在处理的环境(=类层次结构和依赖关系)的正确描述。 – holex 2014-11-04 14:35:05

回答

1

这里是一个方便和易于打交道时要记住网站带块: http://fuckingblocksyntax.com

什么你要找的究竟是(使用的typedef)的最后一部分:

typedef void (^ MyBlock)(id, BOOL); 
MyBlock myBlock = ^(id myId, BOOL myBool) {...}; 

附:请注意,BOOL不是一个对象,而是一个基本类型。

+0

,但他想使用一个指向'BOOL'(='BOOL *')的指针参数,因为他想在块内改变它的值,所以原始块的定义是正确的。 – holex 2014-11-04 14:31:09

+0

即使进行了编辑,它当然不会这样。 – Adis 2014-11-04 14:37:25

+1

该帖子的第一句是_“我想定义一个类似于NSArray的块--enumerateObjects:usingBlock:'”_。我想这很简单。 – holex 2014-11-04 14:38:50

相关问题