首页 文章

Xcode 9.1升级到Swift 4中断#ifdef

提问于
浏览
1

我有一个用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 回答

  • 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
    

    Apple docs here .

    另有一些细节的答案可以在这里找到:https://stackoverflow.com/a/24152730/118091

  • 0

    以前,我在Xcode中使用'Other Swift Flags'构建设置来传递'-DXCODE_BUILD' . 显然,该设置对Swift 4不起作用 . 有效的新设置是“Active Compilation Conditions”(它应该设置为包含XCODE_BUILD,不需要-D标志) .

相关问题