为了账号安全,请及时绑定邮箱和手机立即绑定

#ifdef替换在SWIFT语言中

#ifdef替换在SWIFT语言中

POPMUISE 2019-07-09 16:27:51
#ifdef替换在SWIFT语言中在C/C+/Object-C中,可以使用编译器预处理器定义宏。此外,您可以使用编译器预处理器包括/排除代码的某些部分。#ifdef DEBUG    // Debug-only code#endifSWIFT也有类似的解决方案吗?
查看完整描述

3 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

是的你能做到。

在SWIFT中,您仍然可以使用“#if/#etc/#endif”预处理宏(尽管有更多的限制),如苹果文档..下面是一个例子:

#if DEBUG    let a = 2#else
    let a = 3#endif

现在,您必须在其他地方设置“调试”符号。设置在“SWIFT编译器-自定义旗帜”部分,“其他SWIFT旗帜”行。将调试符号添加到-D DEBUG入场。

与往常一样,您可以在调试或发布时设置不同的值。

我用真正的代码测试了它,它很有效;不过在操场上它似乎没有被识别出来。

你可以读我的原文这里.


重要说明: -DDEBUG=1不管用。只-D DEBUG起作用了。似乎编译器忽略了带有特定值的标志。


查看完整回答
反对 回复 2019-07-09
?
SMILET

TA贡献1796条经验 获得超4个赞

在很多情况下,你并不需要有条件的编撰你只是需要有条件的行为你可以开关。为此,可以使用环境变量。这有一个巨大的优势,您实际上不必重新编译。

您可以在方案编辑器中设置环境变量,并轻松地打开或关闭它:

您可以使用NSProcessInfo检索环境变量:

    let dic = NSProcessInfo.processInfo().environment    if dic["TRIPLE"] != nil {
        // ... do secret stuff here ...    }

这是一个真实的例子。我的应用程序只在设备上运行,因为它使用的是音乐库,而模拟器上不存在这个库。那么,如何在模拟器上为我不拥有的设备拍摄屏幕快照呢?没有这些屏幕截图,我就无法向AppStore屈服。

我需要假数据和一个不同的处理方法..我有两个环境变量:一个在打开时告诉应用程序在我的设备上运行时从真实数据中生成假数据;另一个在打开时在模拟器上运行时使用假数据(而不是缺少的音乐库)。由于Scheme编辑器中的环境变量复选框,打开/关闭每一种特殊模式都很容易。更重要的是,我不能意外地在我的AppStore构建中使用它们,因为归档没有环境变量。


查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 1358 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信