2011-12-16 2 views
1

Можно ли использовать директиву компилятора для управления, если конкретный делегат реализован?Использовать компилятор для управления реализацией делегата?

Например, в следующем коде, я только хочу, чтобы включать в себя библиотеку, если мы константа определена:

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

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

Если kShouldLoadFromCSV не определена, я не хочу, чтобы реализовать CHCSVParserDelegate. Я пробовал придерживаться директивы компиляции в объявлении интерфейса, но это не сработало.

Есть ли способ сделать это?

+0

Пожалуйста, обратите внимание, что это не «директива компилятора», но " предпроцессорная директива ". – jv42

+0

@ jv42 - Хороший звонок. – Moshe

ответ

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

+1 для более читаемого решения. – Hyperbole

+0

Я пробовал первый путь, должно быть, испортил запятую. – Moshe

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 
> { 
... 
}