Использовать компилятор условно для управления реализацией делегата? - PullRequest
1 голос
/ 16 декабря 2011

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

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 16 декабря 2011

Чтобы предоставить еще один вариант форматирования:

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

Но, как вы уже можете видеть, это дело вкуса. Я бы использовал что-то вроде следующего, так как его легче расширить (например, представьте, что вам понадобится другая условная категория ...):

@interface MyAppDelegate : NSObject
<
    UIApplicationDelegate, UITabBarControllerDelegate
#if kShouldLoadFromCSV
    , CHCSVParserDelegate
#endif
> {
...
}
3 голосов
/ 16 декабря 2011

Вы можете сделать это:

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

Или, если хотите, может быть, труднее читать, вопрос вкуса:

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

Вы должны помнить, чтоПрепроцессор не поддерживает синтаксис, он просто влияет на ввод компилятора.

0 голосов
/ 16 декабря 2011

Вы можете попробовать что-то вроде:

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