Xcode 预处理器、变量和 "Will never be executed"

Xcode preprocessor, variables and "Will never be executed"

在基于 Swift 的项目中,我需要根据预处理器规则设置变量的值,如下例所示。

var doSomething = false
#if targetEnvironment(macCatalyst)
doSomething = true
#endif

if doSomething {
    print("Execute!")
}

如果我为 iOS 模拟器构建代码,Xcode 将在 print("Execute!") 行生成“永远不会执行”警告。这是有道理的,因为预处理器规则是在编译之前评估的,因此当目标是 iOS 模拟器时,上面的代码对应于:

var doSomething = false

if doSomething {
    print("Execute!")
}

我只是想知道有没有处理这种情况的建议。理想情况下,我想避免对每个语句都使用预处理器条件,如下所示:

#if targetEnvironment(macCatalyst)
print("Execute!")
#endif

但依赖于原始示例中的变量。我还希望避免在 Xcode 中完全禁用所有源代码的“永远不会执行”警告的显示。

有没有办法设置“doSomething”变量,以便 Xcode 在这种情况下不显示警告?

谢谢


更新:

感谢 Swinny89 建议使用惰性变量。效果很好!您可以在下面找到最终代码:

lazy var doSomething: Bool = {
   #if targetEnvironment(macCatalyst)
      return true
   #else
      return false
   #endif
}()

if doSomething {
    print("Execute!")
}

为了可读性和易用性,我会使用由函数设置的惰性变量。这意味着我们不会浪费两次重新定义相同的东西,而且这个函数在设置你的值时只会 运行 一次:

///Var is true if running on macCatalyst, otherwise false
lazy var doSomething = {
    #if targetEnvironment(macCatalyst)
        return true
    #else
        return false
    #endif
}()

if doSomething {
    print("Execute!")
}