Swift学习笔记(一)宏

2018-05-15  本文已影响17人  Geniune

Swift并没有加入宏定义,因为传统C语言中使用的#define在Swift中基本以常量形式呈现,即使在二者混编时,复杂的宏定义也不能被Swift转换。想要在Swift中实现类似方法,可以单独创建一个类。

我们在OC创建的工程中,获取十六进制表示的颜色的方法是这样定义的:

#define RGBHex(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

在Swift中,类似复杂的表达式宏定义需要用全局func代替

//颜色16位
func RGBHex(rgbValue: UInt)->UIColor{
    return UIColor.init(red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, blue: CGFloat(rgbValue & 0x0000FF) / 255.0, alpha: CGFloat(1.0))
}

这样使用起来与OC语法就非常相近了

//Objective-C
label.textColor = RGBHex(0x666666);
//Swift
label.textColor = RGBHex(rgbValue: 0x666666)

下面我简单罗列了工程中会用到的一部分方法,主要用于处理颜色、字体、以及获取屏幕宽高

/**
 *  屏幕宽高
 */
let SCREEN_W = UIScreen.main.bounds.size.width
let SCREEN_H = UIScreen.main.bounds.size.height
let APP_W = UIScreen.main.bounds.size.width
let APP_H = UIScreen.main.bounds.size.height
let STATUS_H = UIApplication.shared.isStatusBarHidden ? 0.0 : UIApplication.shared.statusBarFrame.size.height//状态栏高度

// RGB颜色
func RGB(r:Float, g:Float, b:Float) -> UIColor {
    return UIColor.init(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(1.0))
}

func RGBA(r:Float, g:Float, b:Float, alpha:Float) -> UIColor {
    return UIColor.init(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(alpha))
}

// 16位颜色
func RGBHex(rgbValue: UInt)->UIColor{
    return UIColor.init(red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, blue: CGFloat(rgbValue & 0x0000FF) / 255.0, alpha: CGFloat(1.0))
}

func RGBAHex(rgbValue:UInt ,alphaValue:Float)->UIColor{
    return UIColor.init(red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, blue: CGFloat(rgbValue & 0x0000FF) / 255.0, alpha: CGFloat(alphaValue))
}

func Font(fontName: String, fontSize: Float) -> UIFont{
    return UIFont(name: fontName, size: CGFloat(fontSize))!
}

// 系统字体
func FontSystem(fontSize: Float) -> UIFont{
    return UIFont.systemFont(ofSize: CGFloat(fontSize))
}

我的App内使用的是PingFangSC字体,则可以再次封装:

func FontPingFangSC_Regular(fontSize: Float) -> UIFont{
    
    return Font(fontName: "PingFangSC-Regular", fontSize: fontSize)
}

调用起来也很方便

label.font = FontPingFangSC_Regular(fontSize: 14.0)
上一篇 下一篇

猜你喜欢

热点阅读