【问题标题】:Xcode if statement never recognizes Active Compilation ConditionsXcode if 语句从不识别活动编译条件
【发布时间】:2020-09-18 13:28:04
【问题描述】:

如您所见,在我的Active compilation conditions 中有 2 个flags(or whatever it is called),A 和 B。
我有 2 个目标,所以第一个目标有标志 A,第二个目标有标志 B...
在代码中,我试图根据选定的应用程序目标定义一个值,但问题是它永远不会进入 #if 块,但总是进入 #else 块。
我一直试图解决这个问题几个小时,但没有任何帮助。我还尝试将-D 放入我的标志名称中,并尝试在Other Swift Flags 中定义A 和B... 没有任何效果。

这是我的简单代码:

#if A
    #define kId @"a1a2a3" //never executed.
#else
    #define kId @"b1b2b3" //always executed. Weird thing is also that I put a breakpoint here but its never catched...
#endif

【问题讨论】:

  • 这是用于 Swift 还是 Objective-C?你试过设置A=1吗?
  • 它的 objc 在我上面的代码中。 A=1?在哪里?
  • 如果您在 Objective-C 部分中编写了简单代码,请按照与 DEBUG=1 相同的方式编写 A=1。
  • 好的@Larme,我应该为B 或=2 写点什么吗?

标签: ios objective-c swift target compiler-flags


【解决方案1】:

主动编译条件适用于 Swift,类似于 Objective-C/C/C++ 中的预处理器宏。

在基于 C 的语言中,以 # 开头的行是预处理器指令。

由于您使用的是 Objective-C,因此要在代码中使用 #if,A 的值应该不为零。如果您只想测试是否定义了A,您可以改用#ifdef。在Preprocessor Macros 下Apple Clang - Preprocessing 下定义A=1。

【讨论】:

  • 我不太了解你。我已经编辑了我的问题并将图片附加在底部,您可以在其中看到我的Apple Clang - Preprocessing。请检查一下。
  • 我假设您想为 Debug 和 Release 目标设置条件。双击Preprocessor Macros 中的调试值(DEBUG=1 COCOAPODS=1),单击工作表中的+ 以添加新值,然后键入A=1。然后对 Release 配置执行相同的操作。
  • 好的@sbooth,我应该为B 或=2 放点什么吗?
  • 这取决于您的代码结构以及您使用的预处理器指令。
猜你喜欢
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 2012-02-17
  • 2023-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多