Xcode user_defined, preprocessor macro和swift compliant参数的使用和区别

user_defined

给用户定义东西用的,具体不明


user_defined

preprocesor macro

预处理宏, oc用的


preprocesor macro

swift compilation conditions

算是Swift宏


swift compilation conditions

Objective-C

OC中一般会在preprocesor macro中定义DEBUG宏,大家最经常用的,这里定义后,代码中就可以用

#ifdef DEBUG
// 你的代码
endif

或者

#if DEBUG
// 你的代码
endif

假设我们想要为app的不同环境(这里假设就正式和测试),用不同的参数, 你可能会在代码中写

#if DEBUG
#define MaxUploadImageCount 100
#else
#define MaxUploadImageCount 9
#endif

但是如果我不想直接在代码中写这个呢? 那么可以在user_defined中,添加(上面有个+号)

添加MaxUploadImageCount

然后在preprocessor macro中添加一条, MaxUploadImageCount=${MaxUploadImageCount},

preprocessor macro中添加一条

在代码用打印MaxUploadImageCount,就会在不同环境中变成不同值,当然实际情景中,这种小参数不会这么干,太大材小用了,仅作演示

在过程中尝试过,在user_defined定义value为字符串的,预定义宏可以读取,但是代码中一旦使用,编译不通过。

Swift

Swift中已经不能在代码中直接定义宏了,想要条件编译,只能提前在active compilation conditions 增加宏,唉!
注意:和oc不一样的是, swift中不是真正的宏, 所以你在active compilation conditions添加时候,不能写DEBUG=1, 你只能写DEBUG。且代码中都是用
#if而没有#ifdef, 但是作用和oc的#ifdef类似啦,只有 有和没有 两个状态。
今天突发奇想,不知道swift中能不能读取到user_defined值? 以及能不能达到另类的预定义宏?

user_defined加入一个字符串的

注意: 不能使用"-"号等无法在变量中使用的符号,会出错!

然后在active compilation conditions加入一条${TEST_DEFINED}, 保存,发现似乎在不同配置下生成不一样的宏,真的可以嘛?试试!

active compilation conditions增加这个

Swift编译参数中成功读取到:


成功读取user_defined中定义的

在代码中使用呢?

在各自配置下,代码提示会出来对应的

在Debug下,代码提示Xiaodong, 在Release下, 会提示Xiaodong_Release

成功使用

用处呢?

假设我们配置Swift编译参数中为isAppstore=${appstore}, 在自动化打包时候,如果这次打包的是appstore包,我想要把这个信息告诉app,可自动增加user_defined里appstore的release配置下值为"isAppstore", 然后代码中的isAppstore就生效了!
添加user_defined值,实现动态swift宏效果, 更多用处等待你来挖掘。仅提供思路。

你可能感兴趣的:(Xcode user_defined, preprocessor macro和swift compliant参数的使用和区别)