Swift:宏定義


一、簡述

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處設置。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM