我有一个框架,需要部分重写,并且正在采用AFNetworking。因此,第二版必须具有不同的超类(AFHTTPClient)。我试图有一个预处理器标志,并有条件地声明这一点。

这是我的代码:

#define TLC_FRAMEWORK_VERSION 2

#if TLC_FRAMEWORK_VERSION == 1
@interface TKSession : NSObject
#elif TLC_FRAMEWORK_VERSION == 2
@interface TKSession : AFHTTPClient
#endif
{
@private
    NSMutableArray  *_cachedShifts;
}


编译器(clang)给出一个错误,基本上是指出预处理之后编译器没有正确读取该声明。它认为看到了这一点:

#define TLC_FRAMEWORK_VERSION 2

{
@private
    NSMutableArray  *_cachedShifts;
}
...


我在做什么错/想念?

最佳答案

#define TLC_FRAMEWORK_VERSION 2

#if TLC_FRAMEWORK_VERSION == 1
@interface TKSession : NSObject
#else
@interface TKSession : AFHTTPClient
#endif
{
@private
     NSMutableArray  *_cachedShifts;
}

但最好定义如下内容:
#if TLC_FRAMEWORK_VERSION == 1
typedef NSObject TLCHTTPClient;
#else
typedef AFHTTPClient TLCHTTPClient;
#endif

@interface TKSession : TLCHTTPClient
{
@private
     NSMutableArray  *_cachedShifts;
}

更容易阅读

关于ios - 您如何使用预处理器有条件地声明新类的父类(super class)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18853455/

10-10 20:58