使用#if,#endif的Swift错误

mse*_*ore 3 xcode preprocessor compiler-directives swift

在Swift中(使用Xcode)使用#if,#endif(如果使用Xcode)会切入操作流程,则会产生错误。该屏幕截图说明了一切:

Swift #if,#endif错误

有谁知道一种解决方案,可以使此示例正常工作,而无需重复整个代码块两次?很容易出现整个块可能很大的情况。

编辑:我的示例有点太简单了。这是一个新示例,其中“ else if”取决于相同的定义(DEBUG)。“ else if”也必须在#if和#endif之内。其他样本可能比这复杂得多。

在此处输入图片说明

Sul*_*han 5

理想情况下,请#if尽可能限制使用。使用预处理程序指令总是有点代码味道。在这种情况下,您可以简单地使用布尔变量:

#if DEBUG
let debug = true
#else
let debug = false
#endif
Run Code Online (Sandbox Code Playgroud)

然后只需使用变量:

var a = 0
var b = 0

...

else if debug && a == b {
}
Run Code Online (Sandbox Code Playgroud)

在发布模式下,代码将变得不可访问,并且优化器仍将删除它。

凭空想象,我们可以找到其他解决方案,例如,可以将检查移至一个函数:

func isDebugCheck(a: Int, b: Int) -> Bool {
   #if DEBUG
      return a == b
   #else
      return false
   #endif
}
Run Code Online (Sandbox Code Playgroud)

或者我们可以将整个代码移到一个单独的函数中,并替换if-elsereturn(或continue,取决于您的需要),例如:

if a == 7 {
  ...
  return
}

#if DEBUG
  if a == b {
     return
  }
#endif

if ...
Run Code Online (Sandbox Code Playgroud)