【问题标题】:iOS preprocessing conditional with defined macros causes "token is not valid"iOS 预处理条件与定义的宏导致“令牌无效”
【发布时间】:2015-08-10 10:12:58
【问题描述】:

我有一个类,我的应用程序中使用的所有 UI 元素的维度都是用 const 编写的。突然我注意到 6 和 4 iphone 的情况看起来不同,所以我需要稍微调整一下数字。但是当我想使用条件来检测设备并为常量分配正确的值时,它给了我“令牌不是预处理器子表达式中的有效二元运算符”。 代码如下:

#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

【问题讨论】:

    标签: c++ ios objective-c c-preprocessor


    【解决方案1】:

    试试下面的方法...

    #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);
    

    【讨论】:

    • 谢谢!现在没有错误,但是突然我的 const 变量现在不起作用,编译器说它们现在未定义。另外我的 IDE 没有将它们标记为变量,所以我认为我需要以另一种方式定义我的 consts
    • 代替这个 #if IS_IPHONE_4_OR_LESS 使用这个 #if IS_IPHONE_4_OR_LESS()
    • 然后我遇到了和一开始一样的错误
    • 在哪个语句中你得到了未定义的错误。
    【解决方案2】:

    我想你应该创建一个函数来分离这些设备。似乎您的编译器无法调用 [[UIScreen mainScreen] bounds].size.width 进行预处理)。这不是我想的那样需要替换......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 2011-07-30
      • 2020-01-22
      相关资源
      最近更新 更多