是否可以使用编译器指令来控制是否实现了特定的委托?
例如,在下面的代码中,如果我们定义了一个常量,我只想包含一个库:
#ifdef kShouldLoadFromCSV
#import "CHCSVParser.h"
#endif
@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate, CHCSVParserDelegate>{
如果kShouldLoadFromCSV
未定义,我不想实施CHCSVParserDelegate
。我已经尝试在接口声明中粘贴编译指令,但这不起作用。
有办法做到这一点吗?
答案 0 :(得分: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
>{
你必须记住预处理器不是语法识别的,它只会影响编译器的输入。
答案 1 :(得分:3)
提供另一种格式选项:
@interface MyAppDelegate : NSObject
#if kShouldLoadFromCSV
<UIApplicationDelegate, UITabBarControllerDelegate, CHSVParserDelegate>
#else
<UIApplicationDelegate, UITabBarControllerDelegate>
#endif
{
...
}
但正如你已经看到的那样,这完全是一种品味问题。我会使用类似下一个的东西,因为它更容易扩展它(例如想象你需要另一个条件类别......):
@interface MyAppDelegate : NSObject
<
UIApplicationDelegate, UITabBarControllerDelegate
#if kShouldLoadFromCSV
, CHCSVParserDelegate
#endif
> {
...
}
答案 2 :(得分:0)
您可以尝试以下内容:
@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate >{
#if kShouldLoadFromCSV
, CHCSVParserDelegate
#endif
> {