在不同的类中使用CompletionBlock



我有类A和类b,我希望每个类都使用一个完成块,所以我创建

typedef void(^CompletionBlock)()

这给了我一个重定义错误。我如何在多个文件中使用该名称?我宁愿不用

typedef void(^ACompletionBlock)();
typedef void(^BCompletionBlock)();

在各自的。h文件中。我没有使用typedef的经验。

由于您的CompletionBlock是(1)相同且(2)不与任何特定类型集绑定,请考虑将此定义放在ClassA.hClassB.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

最新更新