我有一个用Swift 3编写的项目,其中散布着许多#if ... #else
个;他们只检查由我的xcode项目设置的某个变量(用-D编译器标志定义),以了解该项目是在xcode中构建还是与包管理器一起构建,并相应地进行一些导入。例如,
#if XCODE_BUILD
// do some imports that work when built with xcode
#else
// do some imports that won't work when built with xcode
#endif
代码通过任一方法构建都很好。
但是,当我选择升级到Swift 4的选项(提供的选项之一 - "最小化推理"或"匹配Swift 3行为")时,代码无法编译,以便迁移失败。似乎#if
未被尊重或XCODE_BUILD
变量未被定义,因为失败发生在从Xcode构建时不应发生的导入中。
Swift 4是否与#if
做了不同的事情?在进行迁移时,Xcode是否以某种方式不定义编译器标志?
答案 0 :(得分:2)
您可以使用#if
,#else
和#endif
,从而产生:
#if XCODE_BUILD
// do some imports that work when built with xcode
#else
// do some imports that won't work when built with xcode
#endif
可以在此处找到另一个有一些额外细节的答案:https://stackoverflow.com/a/24152730/118091
答案 1 :(得分:0)
以前,我使用的是其他Swift Flags'在Xcode中构建设置以通过' -DXCODE_BUILD'。显然,该设置对Swift 4不起作用。有效的新设置是“活动编译条件”。 (它应该设置为包含XCODE_BUILD,不需要-D标志)。