Swift 16进制编码转UIColor

话不多说啊,直接上代码

import UIKit

// MARK: 通过16进制初始化UIColor
extension UIColor {
    
    convenience init?(hexnum: Int) {
        self.init(hexStr: String(hexnum,radix: 16))
    }
    
    convenience init?(hexStr: String) {
        var hex = hexStr.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
        if hex.hasPrefix("#") {
            hex.remove(at: hex.startIndex)
        }
        if hex.hasPrefix("0x") || hex.hasPrefix(("0X")) {
            hex.removeSubrange((hex.startIndex ..< hex.index(hex.startIndex,offsetBy: 2)))
        }
        
        guard let hexnum = Int(hex,radix: 16) else {
            self.init()
            return nil
        }
        switch hex.characters.count {
        case 3:
            self.init(red: CGFloat(((hexnum & 0xF00) >> 8).duplicate4bits) / 255.0,green: CGFloat(((hexnum & 0x0F0) >> 4).duplicate4bits) / 255.0,blue: CGFloat((hexnum & 0x00F).duplicate4bits) / 255.0,alpha: 1.0)
        case 4:
            self.init(red: CGFloat(((hexnum & 0xF000) >> 12).duplicate4bits) / 255.0,green: CGFloat(((hexnum & 0x0F00) >> 8).duplicate4bits) / 255.0,blue: CGFloat(((hexnum & 0x00F0) >> 4).duplicate4bits) / 255.0,alpha: CGFloat((hexnum & 0x000F).duplicate4bits) / 255.0)
        case 6:
            self.init(red: CGFloat((hexnum & 0xFF0000) >> 16) / 255.0,green: CGFloat((hexnum & 0x00FF00) >> 8) / 255.0,blue: CGFloat((hexnum & 0x0000FF) >> 0) / 255.0,alpha: 1.0)
        case 8:
            self.init(red: CGFloat((hexnum & 0xFF000000) >> 24) / 255.0,green: CGFloat((hexnum & 0x00FF0000) >> 16) / 255.0,blue: CGFloat((hexnum & 0x0000FF00) >> 8) / 255.0,alpha: CGFloat(hexnum & 0x000000FF) / 255.0)
        default:
            self.init()
            return nil
        }
    }
    
}

private extension Int {
    var duplicate4bits: Int {
        return self << 4 + self
    }
}

** 用法如下:**

let colorR = UIColor(hexStr: "0xf00f")
let colorG = UIColor(hexStr: "0X0f0f")
let colorB = UIColor(hexStr: "#0fff")

let colorRR = UIColor(hexStr: "0xff0000ff")
let colorGG = UIColor(hexStr: "0X00ff00ff")
let colorBB = UIColor(hexStr: "#0000ffff")

let colorRN = UIColor(hexnum: 0xf00f)
let colorGN = UIColor(hexnum: 0x00ff00)
let colorBN = UIColor(hexnum: 0x0000ff)

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...