我有一个用Swift 3编写的项目,其中有许多_2736492分散在其中;他们只检查由我的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的选项(提供的选项之一 - "Minimize inference"或"Match Swift 3 behavior")时,代码无法编译,因此迁移失败 . 从Xcode构建时,似乎没有遵守 #if
或者 XCODE_BUILD
变量是不是't being defined, since the failures occur in the imports that shouldn' .
Swift 4与 #if
做了哪些不同的事情?在进行迁移时,Xcode是否以某种方式不定义编译器标志?
2 回答
您可以使用
#if
,#else
和#endif
,从而产生:Apple docs here .
另有一些细节的答案可以在这里找到:https://stackoverflow.com/a/24152730/118091
以前,我在Xcode中使用'Other Swift Flags'构建设置来传递'-DXCODE_BUILD' . 显然,该设置对Swift 4不起作用 . 有效的新设置是“Active Compilation Conditions”(它应该设置为包含XCODE_BUILD,不需要-D标志) .