具有已定义宏的 iOS 预处理条件会导致"token is not valid"

iOS preprocessing conditional with defined macros causes "token is not valid"

本文关键字:token is valid not 条件 定义 预处理 iOS      更新时间:2023-10-16

我有一个以consts形式编写尺寸的类,用于我的应用中使用的所有UI元素。突然我注意到在iphone 6和4上看起来有所不同,所以我需要稍微调整数字。但是,当我想使用条件来检测设备并为常量分配正确的值时,它会给我"令牌在预处理子表达式中不是有效的二进制运算符"。下列代码:

#import <UIKit/UIKit.h>
#import "UIStyles.h"
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)
#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))
#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)
@implementation UIStyles
#if (IS_IPHONE_4_OR_LESS)
    const int BOTTOM_BTN_HEIGHT = 40;
    const int PRICE_AND_LOCATION_BAR_HEIGHT = 40;
#else
    const int BOTTOM_BTN_HEIGHT = 50;
    const int PRICE_AND_LOCATION_BAR_HEIGHT = 50;
#endif
@end

试试下面的方法…

#if defined(IS_IPHONE_6)
const int BOTTOM_BTN_HEIGHT = 40;
const int PRICE_AND_LOCATION_BAR_HEIGHT = 40;
#else
const int BOTTOM_BTN_HEIGHT = 50;
const int PRICE_AND_LOCATION_BAR_HEIGHT = 50;
#endif

在外面,你可以这样做:

 NSLog(@"Botton Height : %d",IS_IPHONE_6);

我认为您应该为这些设备单独创建一个函数。似乎你的编译器不能调用[[uisscreen mainScreen] bounds].size。预处理宽度)。