如何在编译期间有条件地包含协议?

时间:2011-06-28 23:10:54

标签: iphone objective-c

是否可以有条件地包含协议?例如,下面是一些不起作用的代码,但应该让你知道我指的是什么。我只希望在打开广告时包含AdWhirlDelegate界面。

// this works fine
#if ADS_SUPPORTED
#import "AdWhirlView.h"
#endif

// this does NOT work
@interface MyAppDelegate : NSObject <UIApplicationDelegate #if ADS_SUPPORTED ,AdWhirlDelegate #endif>

2 个答案:

答案 0 :(得分:2)

你可以这样做:

#if ADS_SUPPORTED
@interface MyAppDelegate : NSObject <UIApplicationDelegate,AdWhirlDelegate>
#else
@interface MyAppDelegate : NSObject <UIApplicationDelegate>
#endif

......但是IB可能会有点困惑。见this answer,它提供了替代方案。

答案 1 :(得分:0)

这不起作用

重复两次接口声明,一次使用协议,一次不阻塞#if /#else /#endif结构

预处理程序指令只能以非嵌套方式工作,例如标题包含。