【问题标题】:Using a BOOLEAN expression in a #define value在 #define 值中使用 BOOLEAN 表达式
【发布时间】:2015-03-09 16:41:35
【问题描述】:

我通常像 #define kIamAconstant 那样定义我的常量,并且我的 api 端点是这样的常量。现在我的项目要求我有一个切换开关,可以在两个不同的端点之间切换以进行测试。我有成千上万行代码,而不是遍历所有代码并更改它,我想知道有没有一种方法可以在常量中使用布尔表达式。我已经尝试过(如下)并记录了它,但是当我尝试记录它时它会显示Expected expression

#define kIsLiveEnvironment [IICore isLiveEnvironment]
#define kII_URL  if(kIsLiveEnvironment){@"FirstURL" }else{@"SecondURL"};

然后在我的视图控制器中我尝试记录这个:

 NSLog(@"IS Live environment %@ so use url %@",kIsLiveEnvironment,kII_URL);

IICore isLiveEnvironment如下:

+(void)isLiveEnvironment{
[[NSUserDefaults standardUserDefaults] boolForKey:@"isLive"];
}

非常感谢任何帮助:)

【问题讨论】:

  • if 不是表达式,而是语句。您可以if 替换为三元条件表达式,但实际上您应该只定义一个函数。这是非常骇人听闻的。
  • 你可能想要使用另一种类型而不是布尔值,以防你突然需要在三个不同的端点之间切换进行测试。
  • @OwenHartnett 有趣的一点,你有什么建议>
  • 这也确实困扰着我——过去几周的每一篇 iOS 帖子似乎都被某人否决了,没有 cmets 说明原因。
  • #define BUILD_TYPE_1 1 - #define BUILD_TYPE_2 2 - #define REAL_BUILD_TYPE BUILD_TYPE_1 -(用回车替换连字符)

标签: ios c-preprocessor boolean-expression


【解决方案1】:

你的代码变成:

NSLog(@"IS Live environment %@ so use url %@",
    [IICore isLiveEnvironment],
    if([IICore isLiveEnvironment]){@"FirstURL" }else{@"SecondURL"};
);

这就是您出现错误的原因。

kII_URL 更改为:

#define kII_URL ((kIsLiveEnvironment) ? @"FirstURL" : @"SecondURL")

【讨论】:

  • 感谢 rmaddy,错误出在其他地方。最后你的答案很完美。
【解决方案2】:

我猜是问题

#define kII_URL  if(kIsLiveEnvironment){@"FirstURL" }else{@"SecondURL"};

你试过了吗:

#define kII_URL  ((kIsLiveEnvironment) ? @"FirstURL" : @"SecondURL")

【讨论】:

  • 最好把那个宏括起来。
  • @TheParamagneticCroissant true :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多