我有类A和类b,我希望每个类都使用一个完成块,所以我创建
typedef void(^CompletionBlock)()
这给了我一个重定义错误。我如何在多个文件中使用该名称?我宁愿不用
typedef void(^ACompletionBlock)();
typedef void(^BCompletionBlock)();
在各自的。h文件中。我没有使用typedef
的经验。
由于您的CompletionBlock
是(1)相同且(2)不与任何特定类型集绑定,请考虑将此定义放在ClassA.h
和ClassB.h
文件中包含的公共头文件中:
CompletionAction.h
typedef void(^CompletionAction)();
ClassA.h
#include "CompletionAction.h"
@interface ClassA
-(void)runWithCompletionBlock:(CompletionAction)onDone;
@end
ClassB.h
#include "CompletionAction.h"
@interface ClassB
-(void)runSomethingElseWithCompletionBlock:(CompletionAction)onDone;
@end
像这样的简单块的另一个选择是将它们的类型"inline"定义为方法声明的一部分,从而避免typedef
,像这样:
ClassA.h
@interface ClassA
-(void)runWithCompletionBlock:(void(^)())onDone;
@end
ClassB.h
@interface ClassB
-(void)runSomethingElseWithCompletionBlock:(void(^)())onDone;
@end