2011-12-16 57 views
1

是否可以使用编译器指令来控制是否实现了特定的委托?使用编译器有条件控制委托实现?

例如,在下面的代码,我只想包括图书馆,如果我们是一个常量的定义:

#ifdef kShouldLoadFromCSV 
#import "CHCSVParser.h" 
#endif 

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate, CHCSVParserDelegate>{ 

如果kShouldLoadFromCSV是不确定的,我不希望实施CHCSVParserDelegate。我试图在接口声明中粘贴compile指令,但那不起作用。

有没有办法做到这一点?

+0

请注意,这不是一个“编译器指令”,但一个“预处理指令'。 – jv42 2011-12-16 16:56:30

+0

@ jv42 - 良好的通话。 – Moshe 2011-12-16 16:59:55

回答

3

你可以这样做:

#if kShouldLoadFromCSV 
    @interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate, CHCSVParserDelegate>{ 
#else 
    @interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate>{ 
#endif 

或者,如果你愿意的话,也许更难读,品味的问题:

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate 
#if kShouldLoadFromCSV 
     , CHCSVParserDelegate 
#endif 
>{ 

你要记住的是,预处理器ISN” t语法意识到,它只会影响编译器的输入。

0

你可以尝试这样的:

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate >{ 
#if kShouldLoadFromCSV 
    , CHCSVParserDelegate 
#endif 
> { 
3

提供另一种格式化选项:

@interface MyAppDelegate : NSObject 
#if kShouldLoadFromCSV 
    <UIApplicationDelegate, UITabBarControllerDelegate, CHSVParserDelegate> 
#else 
    <UIApplicationDelegate, UITabBarControllerDelegate> 
#endif 
{ 
... 
} 

但你已经可以看到,这是完全的喜好问题。我会使用类似的下一个,因为它更容易把它扩大(如想象你需要另一个条件类别...):

@interface MyAppDelegate : NSObject 
< 
    UIApplicationDelegate, UITabBarControllerDelegate 
#if kShouldLoadFromCSV 
    , CHCSVParserDelegate 
#endif 
> { 
... 
}