1

コンパイラ指令を使用して、特定のデリゲートが実装されているかどうかを制御することは可能ですか?

たとえば、次のコードでは、定数が定義されている場合にのみライブラリを含めたいと思います。

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

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

が未定義の場合kShouldLoadFromCSV、実装したくありませんCHCSVParserDelegate。インターフェイス宣言にコンパイルディレクティブを貼り付けようとしましたが、うまくいきませんでした。

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

4

3 に答える 3

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

プリプロセッサは構文を認識していないことを覚えておく必要があります。プリプロセッサはコンパイラの入力に影響を与えるだけです。

于 2011-12-16T16:53:13.963 に答える
3

さらに別のフォーマットオプションを提供するには:

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

しかし、すでにお分かりのように、それは完全に好みの問題です。拡張する方が簡単なので、次のようなものを使用します(たとえば、別の条件付きカテゴリが必要になると想像してください...):

@interface MyAppDelegate : NSObject
<
    UIApplicationDelegate, UITabBarControllerDelegate
#if kShouldLoadFromCSV
    , CHCSVParserDelegate
#endif
> {
...
}
于 2011-12-16T17:07:08.797 に答える
0

次のようなことを試すことができます:

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate >{
#if kShouldLoadFromCSV
    , CHCSVParserDelegate
#endif
> {
于 2011-12-16T16:54:54.063 に答える