2014-06-11 35 views
0

我有A類和B類。我希望每個使用完畢塊,所以我創建在不同的類使用一CompletionBlock的

typedef void(^CompletionBlock)() 
兩個.h文件

這給了我一個重新定義的錯誤。我如何在多個文件中使用該名稱?我寧願不必使用

typedef void(^ACompletionBlock)(); 

typedef void(^BCompletionBlock)(); 

在他們各自的.h文件中。我沒有使用typedef的經驗。

+0

將'typdef'放入頭文件(例如'Constants.h'),並將其導入到'ClassA'和'ClassB'中。你將能夠在兩個類中使用相同的類型。 – holex

回答

0

由於您CompletionBlock s爲(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 

另一選擇爲簡單塊那樣是定義它們的類型「內聯」作爲方法聲明的一部分,因此避免了一個typedef,像這樣:

ClassA.h

@interface ClassA 
-(void)runWithCompletionBlock:(void(^)())onDone; 
@end 

ClassB的.h

@interface ClassB 
-(void)runSomethingElseWithCompletionBlock:(void(^)())onDone; 
@end 
相關問題