【发布时间】:2021-10-26 14:24:51
【问题描述】:
我将TARGETS -> Target's Name -> Build Settings -> Other Swift Flags 下的目标宏设置为'Target#1',将另一个目标设置为'Target#2'。现在我有一个#if 语句正在检查当前正在运行的目标,并且我想对每个目标做一些不同的事情,它是这样的:
#if Target#1 || Target#2
DoSomething()
#endif
或
#if Target#1
DoSomething()
#elseif Target#2
DoSomethingElse()
#endif
我想做的是让在一个地方而不是在我的代码中的多个位置进行编辑更容易一些,而不是在每个#if 语句中添加目标名称,我只想检查宏是否位于宏数组中。类似的东西:
#define TARGETS_FOR_OPTION_1 [Target#1, Target#2, Target#3]
#define TARGETS_FOR_OPTION_2 [Target#4, Target#5, Target#6]
#if TARGETS_FOR_OPTION_1
DoSomething()
#elseif TARGETS_FOR_OPTION_2
DoSomethingElse()
#endif
这在 Swift 中可行吗?
【问题讨论】:
-
这与集中检查任何其他类型的条件(不一定是宏)没有什么不同。你在一个地方做一次,从一组对象中挑选一个对象。您将所有条件行为放在这些对象的方法中。从那时起,您只需调用您需要的方法,多态性将有利于您根据您的清晰环境调用正确的方法实现。
-
不同之处在于如果我想排除某些文件编译到特定目标。在您的方法中,我需要在所有目标中编译项目的所有文件,使用 Macro #if 语句将允许我从编译中排除一些文件。对不对?
-
不,您只会在它们所属的目标中包含文件(使用 Xcode 右侧的侧边栏)。具有“切换逻辑”的文件是唯一需要宏来删除依赖于特定目标类的部分的文件
-
好的,我明白你的意思,在“切换逻辑”文件中执行宏#if 语句,让每个人都叫他。很好的解决方案... :) 谢谢!您可以将其添加为答案,我会接受。
-
IDK 如何将其总结为一个好的答案,这只是基本的多态性。但我会总结一下,我猜