有没有办法声明一个Objective-C块typedef,其参数包含typedef?

时间:2014-11-22 18:34:27

标签: objective-c syntax objective-c-blocks typedef

这里有一个有趣的目标 - C大师......

有没有办法声明一个包含该typedef参数的objective-C块typedef?

typedef BOOL (^SSCellAction) ( UITableViewController* inTVC, SSCellAction inChainedAction );

我的想法是,我想使用链式菜单操作系统,允许一系列工作/响应发生(通常1-3项)。当最后一个动作调用时,它为inChainedAction传递nil。由于这看起来似乎相当微不足道,如果我能在没有说不的情况下弄清楚如何宣布它,我就会被诅咒。 :)

1 个答案:

答案 0 :(得分:2)

rmaddy的评论是正确的。就像在C中一样,typedef不能使用它自己。基本上,typedef不是真正的类型,而只是编译编译器在编译时扩展的别名。总是可以自己手动扩展程序中的所有typedef(这有时是一个有益的练习),因此您的程序编写时没有typedef。但是,无法扩展递归typedef

一些可能的解决方法:

  • 使用id作为参数类型,并在块内强制转换为正确的类型。这会失去类型安全性。
  • 或者,使用块的一个成员的结构类型。 struct是一个真实的类型,因此可以在其定义中使用。这样做的缺点是你明确地将块“包装”到struct类型中以传递它,并在需要调用时通过访问字段将结构显式“解包”到块中。这种方式是类型安全的。