使用#if、#endif 的 Swift 错误

标签 swift xcode preprocessor compiler-directives

在 Swift 中使用 #if、#endif(使用 Xcode)会在切入操作流程时产生错误。这个截图说明了一切:

Swift #if, #endif error

有谁知道无需重复整个代码块两次即可使该示例正常工作的解决方案?很容易出现整个 block 非常大的情况。

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

enter image description here

最佳答案

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

#if DEBUG
let debug = true
#else
let debug = false
#endif

然后简单地使用变量:

var a = 0
var b = 0

...

else if debug && a == b {
}

在 Release模式下,代码将变得无法访问,优化器无论如何都会将其删除。

稍加想象,我们可以找到其他解决方案,例如,我们可以将检查移到函数中:

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

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

if a == 7 {
  ...
  return
}

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

if ...

关于使用#if、#endif 的 Swift 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55125009/

相关文章:

ios - 在 UITableViewCell 的左侧添加垂直条

python-markdown htmlStash 占位符未被替换

macros - 在 Inno Setup [代码] 部分将宏扩展为 Pascal 代码

objective-c - 在转发类中找不到属性

ios - CC UITouches 忽略第二次触摸

ios - .xcworkspace 没有启用存档选项

c - 如何使用 sscanf() 中的宏定义的可变宽度说明符

ios - 在 iOS 中做一个搓屏手势?

ios - 如何将渐变添加到 UIView 作为扩展

ios - 如果对可选的UIViewController数组进行操作,如何避免嵌套过多?