如何声明一个将块作为回调的方法

时间:2014-12-14 18:00:52

标签: objective-c

我有一个方法,我想这样称呼:

  void (^someblock)()=^{
    NSLog(@"I want to know");
  };
  [Item getCacheAndCallback:self.menuItemID andCallback:someblock];

我如何在头文件中声明这个?我试过了

  +(void)getCacheAndCallback:(int)menuItemID andCallback:(^());

但是说“预期的类型”。我认为这应该是

类型的空白

thx

3 个答案:

答案 0 :(得分:4)

 +(void)getCacheAndCallback:(int)menuItemID andCallback:(void(^)(void))completionBlock;

答案 1 :(得分:1)

将块类型直接放入方法签名可能会因为您发现而变得混乱。我建议您使用typedef使其更清洁:

typedef void(^VoidBlock)();

现在您可以将块声明编写为:

VoidBlock someBlock =  ^{ NSLog(@"I want to know"); };

并将您的方法声明为:

+ (void) getCacheAndCallback:(int)menuItemID andCallback:(VoidBlock)callBack;

注意: typedef不会引入类型,只是简写。这意味着,例如,您可以使用完整类型(甚至是具有相同完整类型的不同typedef)声明块,并将其用作VoidBlock

答案 2 :(得分:1)

块语法很奇怪。每当我碰巧遗忘某些东西时,我都会将此链接放在引用中:fuckingblocksyntax.com