我正在按以下方式检查iOS版本
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
现在我想根据这个
编译一个类#if defined SYSTEM_VERSION_LESS_THAN(@"9.0")
#import "SomeClassBelowiOS9.h"
#else
#import "SomeClassIniOS9AndAbove.h"
#endif
我收到错误令牌不是预处理器子表达式中的有效二元运算符
修改
它是这样的,但我不确定如果这是一个很好的解决方案,基本的想法是以更简单的方式重用宏
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define belowiOS9 SYSTEM_VERSION_LESS_THAN(@"9.0")
#if belowiOS9
#import "SomeClassBelowiOS9.h"
#else
#import "SomeClassIniOS9AndAbove.h"
#endif
答案 0 :(得分:0)
Objective-C预处理器不是编译器的一部分,但它是一个 编译过程中的单独步骤。简单来说,一个 Objective-C预处理器只是一个文本替换工具 指示编译器在实际之前进行必要的预处理 汇编
也许你会在预处理条件的行中得到错误。
#if defined SYSTEM_VERSION_LESS_THAN(@"9.0")
#if
需要在编译时进行评估。但是[[UIDevice currentDevice] systemVersion]
在运行时才具有价值。这就是为什么编译器无法编译这一行。
正如@trojacfoe所说,试试#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED