对于那里的客观C大师来说,这是一个有趣的…
有没有办法声明一个包含该typedef参数的objective-C块typedef?
typedef BOOL (^SSCellAction) ( UITableViewController* inTVC, SSCellAction inChainedAction );
我的想法是,我想使用链式菜单操作系统,允许一系列工作/响应发生(通常1-3项).当最后一个动作调用时,它会为inChainedAction传递nil.因为这看起来似乎相当微不足道,如果我不知道如何在没有llvm说不的情况下宣布它,我将被拦截. 🙂
最佳答案 rmaddy的评论是正确的.就像在C中一样,typedef不能自己使用.基本上,typedef不是真正的类型,而只是编译编译器在编译时扩展的别名.总是可以自己手动扩展程序中的所有typedef(这有时是一个有益的练习),所以你的程序是在没有typedef的情况下编写的.但是,无法扩展递归typedef.
一些可能的解决方法:
>使用id作为参数类型,并在块内转换回正确的类型.这会失去类型安全性.
>或者,使用块的一个成员的结构类型. struct是一个真实的类型,因此可以在其定义中使用.这样做的缺点是你明确地将块“包装”到struct类型中以传递它,并在需要调用时通过访问字段将结构显式“解包”到块中.这种方式是类型安全的.