美文网首页
Swift学习笔记(一)宏

Swift学习笔记(一)宏

作者: Geniune | 来源:发表于2018-05-15 14:05 被阅读17次

    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)
    

    相关文章

      网友评论

          本文标题:Swift学习笔记(一)宏

          本文链接:https://www.haomeiwen.com/subject/uaiedftx.html