2011-12-16 5 views
1

コンパイラディレクティブを使用して、特定のデリゲートが実装されているかどうかを制御できますか?デリゲートの実装を制御するためにコンパイラの条件を使用しますか?

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

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

kShouldLoadFromCSVが定義されていない場合、私はCHCSVParserDelegateを実装する必要はありません:たとえば

は、次のコードでは、私は私達が定数が定義されている場合は、ライブラリを含めたいです。私は、インターフェイス宣言でコンパイルディレクティブを固執しようとしましたが、うまくいきませんでした。

これを行う方法はありますか?

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

するか、必要であれば、多分難しいが、好みの問題読み取るために:

+0

「コンパイラ・ディレクティブ」ではなく、「コンパイラ・ディレクティブ」であることに注意してください。次のようなものを使用してください。プリプロセッサディレクティブ 'と呼ばれます。 – jv42

+0

@ jv42 - 申し訳ありません。 – Moshe

答えて

3

あなたはこれを行うことができます

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

あなたは覚えているが、そのプリプロセッサISN」 t構文を認識すると、コンパイラの入力に影響します。

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate >{ 
#if kShouldLoadFromCSV 
    , CHCSVParserDelegate 
#endif 
> { 
+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 
{ 
... 
} 

をしかし、あなたはすでに見ることができるように、それは完全に好みの問題だ

関連する問題