Skip to content

Instantly share code, notes, and snippets.

@dirk
Forked from blixt/HexToUIColor.swift
Created October 22, 2015 06:35
Show Gist options
  • Save dirk/629c212ced02edf15cf4 to your computer and use it in GitHub Desktop.
Save dirk/629c212ced02edf15cf4 to your computer and use it in GitHub Desktop.
Swift UIColor extension that parses a hexadecimal color string
extension UIColor {
enum Error: ErrorType {
case Parsing(String)
}
convenience init(hex input: String) throws {
let hex = input.stringByTrimmingCharactersInSet(NSCharacterSet.alphanumericCharacterSet().invertedSet)
var int = UInt32()
guard NSScanner(string: hex).scanHexInt(&int) else {
throw Error.Parsing("Unable to scan hexadecimal integer")
}
let a, r, g, b: UInt32
switch hex.characters.count {
case 3: // RGB (12-bit)
(a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
case 6: // RGB (24-bit)
(a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
case 8: // ARGB (32-bit)
(a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
default:
throw Error.Parsing("Invalid hexadecimal size: \(hex.characters.count)")
}
self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment