一、簡述
swift中並沒有加入宏系統,C語言使用#define定義的基本常量在導入Swift時被Swift編譯自動轉為Swfit語言的全局變量。但復雜的宏定義不能被Swift轉換。Swift中類似宏定義,可以單獨創建一個類,如Const.swift,在此類中聲明一些常量。
例如:
// 屏幕的寬 let SCREEN_WIDTH = UIScreen.main.bounds.size.width // 屏幕的高 let SCREEN_HEIGHT = UIScreen.main.bounds.size.height //判斷iPhone4 let IPHONE4_DEV:Bool! = (UIScreen.main.bounds.size.height == 480) ? true : false //判斷iPhone5/5c/5s let IPHONE5_DEV:Bool! = (UIScreen.main.bounds.size.height == 568) ? true : false //判斷iPhone6/6s let IPHONE6s_DEV:Bool! = (UIScreen.main.bounds.size.height == 667) ? true : false //判斷iPhone6p let IPHONE6p_DEV:Bool! = (UIScreen.main.bounds.size.height > 667) ? true : false //判斷iPad let IPAD_DEV:Bool! = (UIDevice.current.userInterfaceIdiom == .pad) ? true : false
當然,Swift也支持條件編譯
例如:
#if IPHONE4_DEV //iphone4設置編譯此處 #elseif IPHONE5_DEV //iphone5/5c/5s設置編譯此處 #elseif IPHONE6_DEV //iphone6/6s設置編譯此處 #elseif IPHONE6p_DEV //iphone6p設置編譯此處 #elseif IPAD_DEV //ipad設置編譯此處 #else //其他設置編譯此處 #endif
對於復雜一點的,僅僅使用常量定義是難以實現的,需要定義宏方法來達到目的。
例如:
/// 重置透明度的隨即色 /// /// - parameter R: red /// - parameter G: green /// - parameter B: black /// - parameter A: alpha (0~1之間) /// func XYQRandomColorAlpha(R:CGFloat,G:CGFloat,B:CGFloat,A:CGFloat) -> UIColor{ return UIColor.init(red: R/255.0, green: G/255.0, blue: B/255.0, alpha: A) } /// 默認透明度的隨即色 /// /// - parameter R: red /// - parameter G: green /// - parameter B: black /// func XYQRandomColor(R:CGFloat,G:CGFloat,B:CGFloat) -> UIColor{ return UIColor.init(red: R/255.0, green: G/255.0, blue: B/255.0, alpha:1.0) }
注意:創建的宏文件,也即Const.swift文件的路徑設置和OC是一樣的,都需要在buildSetting中prefix Header處設置。