我正在以下列方式检查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
发布于 2016-04-12 08:25:52
Objective预处理器不是编译器的一部分,而是编译过程中的一个单独步骤。简单地说,Objective预处理器只是一个文本替换工具,它指示编译器在实际编译之前进行所需的预处理。
也许你是在一条线上出错,这是预处理条件.
#if defined SYSTEM_VERSION_LESS_THAN(@"9.0")
#if
需要在编译时进行评估.但[[UIDevice currentDevice] systemVersion]
只是在运行时才有价值。这就是为什么编译器不能编译这一行。
就像@trojacfoe说的,试试#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
吧
https://stackoverflow.com/questions/36567190
复制相似问题