Swift2.0でカラーコードからUIColorに変換


Swift2.0でカラーコードからUIColorに変換

swiftでもObjective-Cでも、色指定をしたい場合
UIColorを使うのですがRGBで数値を設定しなきゃいけないのが非常に面倒臭い。

let color:UIColor = UIColor(red:0.0,green:0.5,blue:1.0,alpha:1.0)

UIColorの定義済みの色は
blackColor()
redColor()
greenColor()
...
等まあまあありますが限られているので、
HTML,CSSのように楽にカラーコードを指定しまくって好みの見栄えに!が
なかなか叶えられん訳です。
なのでカラーコードを設定したらUIColorに変換してくれるメソッドを用意してみる。
他でも紹介されていますが2.0対応で自分用に書いたもの↓

static func colorWithHexString (hex:String) -> UIColor {

        let cString:String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).uppercaseString

        if ((cString as String).characters.count != 6) {
            return UIColor.grayColor()
        }

        let rString = (cString as NSString).substringWithRange(NSRange(location: 0, length: 2))
        let gString = (cString as NSString).substringWithRange(NSRange(location: 2, length: 2))
        let bString = (cString as NSString).substringWithRange(NSRange(location: 4, length: 2))

        var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
        NSScanner(string: rString).scanHexInt(&r)
        NSScanner(string: gString).scanHexInt(&g)
        NSScanner(string: bString).scanHexInt(&b)

        return UIColor(
            red: CGFloat(Float(r) / 255.0),
            green: CGFloat(Float(g) / 255.0),
            blue: CGFloat(Float(b) / 255.0),
            alpha: CGFloat(Float(1.0))
        )
    }

呼ぶ際にはこれでOK。

colorWithHexString("FF1493")  //カラーコードを設定
colorWithHexString("000000")

20161120 追記

swift 3.0対応版。
stringByTrimmingCharactersInSettrimmingCharacters に変更になっています。

static func colorWithHexString (_ hex:String) -> UIColor {

        let cString = hex.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased()

        if ((cString as String).characters.count != 6) {
            return UIColor.gray
        }

        let rString = (cString as NSString).substring(with: NSRange(location: 0, length: 2))
        let gString = (cString as NSString).substring(with: NSRange(location: 2, length: 2))
        let bString = (cString as NSString).substring(with: NSRange(location: 4, length: 2))

        var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
        Scanner(string: rString).scanHexInt32(&r)
        Scanner(string: gString).scanHexInt32(&g)
        Scanner(string: bString).scanHexInt32(&b)

        return UIColor(
            red: CGFloat(Float(r) / 255.0),
            green: CGFloat(Float(g) / 255.0),
            blue: CGFloat(Float(b) / 255.0),
            alpha: CGFloat(Float(1.0))
        )
    }