Swift4 UIColorをHEXで指定できるようにしてenumで管理する

2018-05-17

Swiftで、自前のカラーライブラリみたいなやつを作りたい時のやつ。

UIColorを拡張するExtension


// HEXからUIColorに変換する拡張
extension UIColor {
    convenience init?(hex: String, alpha: CGFloat = 1.0) {
        let validatedHexColorCode = hex.replacingOccurrences(of: "#", with: "")
        let scanner = Scanner(string: validatedHexColorCode)
        var colorCode: UInt32 = 0
        
        guard scanner.scanHexInt32(&colorCode) else {
            print("ERROR: 色変換に失敗しました。")
            return nil
        }
        
        let R = CGFloat((colorCode & 0xFF0000) >> 16) / 255.0
        let G = CGFloat((colorCode & 0x00FF00) >> 8) / 255.0
        let B = CGFloat(colorCode & 0x0000FF) / 255.0
        self.init(displayP3Red: R, green: G, blue: B, alpha: alpha)
    }
}

Enumを作成して簡単に使えるようにする


enum Color: String {
    case red = "C85D5D"
    case orange = "DD7C3A"
    case yellow = "D8C05B"
    case green = "66A040"
    case emerald = "5BAA84"
    case lightblue = "63BFC1"
    case blue = "4A78A5"
    case purple = "835C91"
    case pink = "D182B9"
    case brown = "8E6C4D"
    case gray = "828282"
    case black = "3F3F3F"
    
    var UIColor: UIKit.UIColor {
        return UIKit.UIColor(hex: self.rawValue)!
    }
    
    var cgColor: UIKit.CGColor {
        return self.UIColor.cgColor
    }
}

使い方


let blue = Color.blue.UIColor
let blueCg = Color.blue.cgColor

参考文献

こちらをSwift4に書き直しました。