在快速之前,我将为alpha,beta和分发版本定义一组方案 . 这些方案中的每一个都有一组宏,这些宏被定义为在项目级别处理某些行为 . 最简单的示例是DEBUG = 1宏,默认情况下为Run构建的默认方案中的所有Xcode项目定义 . 可以查询#ifdef DEBUG ...并相应地在代码中做出决定,甚至编译出非必要的代码 .
看起来这种类型的配置选通并不像使用swift那么容易,因为不支持宏 . 有人可以建议一个类似的方法,我不在乎代码是否编译出来,本身 . 不过,我想基于构建方案来构建功能 .
4 回答
在Swift中,您仍然可以使用"#if/#else/#endif"预处理器宏(尽管更受约束),如Apple docs . 这是一个例子:
现在,您必须在其他位置设置"DEBUG"符号 . 将其设置在"Swift Compiler - Custom Flags"部分,"Other Swift Flags"行 . 使用
-D DEBUG
条目添加DEBUG符号 .(构建设置 - > Swift编译器 - 自定义标志)
像往常一样,您可以在Debug或Release中设置不同的值 .
我用实际代码测试了它;它似乎没有在操场上被认出来 .
我们遇到了一个不想设置swift编译器标志的问题,因为我们不想设置它们并让它们保持最新的不同目标等 . 另外,在我们的混合代码库中,我们不想记住为每种语言始终适当地设置标志 .
对于我们,我们在ObjC中声明了一个文件
PreProcessorMacros.h
在他们中
PreProcessorMacros.m
然后,在您的Objective-C桥接 Headers 中
现在,在Swift代码库中使用它
这绝对是一种解决方法,但它解决了我们的问题所以我在这里发布它希望它会有所帮助 . 这并不意味着现有答案无效 .
Logans方法更加巧妙的解决方案 . 在目标的构建设置中
Other Swift Flags
的Other Swift Flags
中设置-D DEBUG
.然后在全局范围内声明以下方法:
现在用它作为
我正在使用混合语言代码库,其中obj-c代码使用宏将调试消息发送到控制台(该宏依赖于我们的调试预处理器标志) . 我希望能够在swift代码中调用相同的宏...
我在我的一个obj-c类上创建了一个类方法,它是该宏的包装器 .
我将obj-c标头添加到我们的桥头文件中 .
现在我的swift代码将该类方法调用为obj-c宏的"proxy" .
有点烦人的是,我不能直接在快速代码中调用宏,但至少现在我只在项目中有一个位置担心打开/关闭调试标志 .