user_defined
給用戶(hù)定義東西用的咐吼,具體不明
preprocesor macro
預(yù)處理宏, oc用的
swift compilation conditions
算是Swift宏
Objective-C
OC中一般會(huì)在preprocesor macro中定義DEBUG宏,大家最經(jīng)常用的晚碾,這里定義后牍颈,代碼中就可以用
#ifdef DEBUG
// 你的代碼
endif
或者
#if DEBUG
// 你的代碼
endif
假設(shè)我們想要為app的不同環(huán)境(這里假設(shè)就正式和測(cè)試)煮岁,用不同的參數(shù), 你可能會(huì)在代碼中寫(xiě)
#if DEBUG
#define MaxUploadImageCount 100
#else
#define MaxUploadImageCount 9
#endif
但是如果我不想直接在代碼中寫(xiě)這個(gè)呢冶伞? 那么可以在user_defined中响禽,添加(上面有個(gè)+號(hào))
然后在preprocessor macro中添加一條芋类,
MaxUploadImageCount=${MaxUploadImageCount}
,
在代碼用打印MaxUploadImageCount界阁,就會(huì)在不同環(huán)境中變成不同值侯繁,當(dāng)然實(shí)際情景中,這種小參數(shù)不會(huì)這么干泡躯,太大材小用了贮竟,僅作演示。
在過(guò)程中嘗試過(guò)较剃,在user_defined定義value為字符串的咕别,預(yù)定義宏可以讀取,但是代碼中一旦使用写穴,編譯不通過(guò)惰拱。
Swift
Swift中已經(jīng)不能在代碼中直接定義宏了啊送,想要條件編譯弓颈,只能提前在active compilation conditions 增加宏,唉删掀!
注意:和oc不一樣的是翔冀, swift中不是真正的宏, 所以你在active compilation conditions添加時(shí)候披泪,不能寫(xiě)DEBUG=1, 你只能寫(xiě)DEBUG纤子。且代碼中都是用
#if
而沒(méi)有#ifdef
, 但是作用和oc的#ifdef
類(lèi)似啦,只有 有和沒(méi)有 兩個(gè)狀態(tài)款票。
今天突發(fā)奇想控硼,不知道swift中能不能讀取到user_defined值? 以及能不能達(dá)到另類(lèi)的預(yù)定義宏艾少?
注意: 不能使用"-"號(hào)等無(wú)法在變量中使用的符號(hào)卡乾,會(huì)出錯(cuò)!
然后在active compilation conditions加入一條${TEST_DEFINED}
, 保存,發(fā)現(xiàn)似乎在不同配置下生成不一樣的宏缚够,真的可以嘛幔妨?試試鹦赎!
Swift編譯參數(shù)中成功讀取到:
在代碼中使用呢?
在Debug下古话,代碼提示Xiaodong, 在Release下, 會(huì)提示Xiaodong_Release
用處呢锁施?
假設(shè)我們配置Swift編譯參數(shù)中為isAppstore=${appstore}
陪踩, 在自動(dòng)化打包時(shí)候,如果這次打包的是appstore包悉抵,我想要把這個(gè)信息告訴app肩狂,可自動(dòng)增加user_defined里appstore的release配置下值為"isAppstore", 然后代碼中的isAppstore就生效了姥饰!
添加user_defined值傻谁,實(shí)現(xiàn)動(dòng)態(tài)swift宏效果, 更多用處等待你來(lái)挖掘媳否。僅提供思路栅螟。