1

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

例如,在下面的代码中,如果我们定义了一个常量,我只想包含一个库:

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

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

如果kShouldLoadFromCSV未定义,我不想实现CHCSVParserDelegate. 我尝试在接口声明中添加编译指令,但没有奏效。

有没有办法做到这一点?

4

3 回答 3

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 回答
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 回答
0

您可以尝试以下方法:

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