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值? 以及能不能达到另类的预定义宏?
注意: 不能使用"-"号等无法在变量中使用的符号,会出错!
然后在active compilation conditions加入一条${TEST_DEFINED}
, 保存,发现似乎在不同配置下生成不一样的宏,真的可以嘛?试试!
Swift编译参数中成功读取到:
成功读取user_defined中定义的
在代码中使用呢?
在Debug下,代码提示Xiaodong, 在Release下, 会提示Xiaodong_Release 成功使用
用处呢?
假设我们配置Swift编译参数中为isAppstore=${appstore}
, 在自动化打包时候,如果这次打包的是appstore包,我想要把这个信息告诉app,可自动增加user_defined里appstore的release配置下值为"isAppstore", 然后代码中的isAppstore就生效了!
添加user_defined值,实现动态swift宏效果, 更多用处等待你来挖掘。仅提供思路。
网友评论