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)
网友评论