如何在Swift中创build一个hex颜色的stringUIColor初始值设定项?

我使用这个代码从hex值创buildUIColor。 它的工作完美。

extension UIColor { convenience init(red: Int, green: Int, blue: Int) { assert(red >= 0 && red <= 255, "Invalid red component") assert(green >= 0 && green <= 255, "Invalid green component") assert(blue >= 0 && blue <= 255, "Invalid blue component") self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0) } convenience init(netHex:Int) { self.init(red:(netHex >> 16) & 0xff, green:(netHex >> 8) & 0xff, blue:netHex & 0xff) } } 

用法:

 var textColor = UIColor(netHex: 0xffffff) 

这段代码完全适用于Inthex代码。 但它需要hex代码0xffffff作为Inttypes。 我有从Web服务的hex代码。 它会像“#ffffff”(String not Int)。 我可以将这个string转换为“0xffffff”。 但我不能从“0xffffff”(string)转换为0xffffff(诠释)。

我需要这样的东西

 var textColor = UIColor(netHex: "0xffffff") 

或者更好的是这样的:

 var textColor = UIColor(netHex: "#ffffff") 

提前致谢。

Xcode 8.2•Swift 3.0.2

 extension UIColor { convenience init?(hexString: String) { var chars = Array(hexString.hasPrefix("#") ? hexString.characters.dropFirst() : hexString.characters) // Swift 4 just use `var chars = Array(hexString.hasPrefix("#") ? hexString.dropFirst() : hexString[...])` let red, green, blue, alpha: CGFloat switch chars.count { case 3: chars = chars.flatMap { [$0, $0] } fallthrough case 6: chars = ["F","F"] + chars fallthrough case 8: alpha = CGFloat(strtoul(String(chars[0...1]), nil, 16)) / 255 red = CGFloat(strtoul(String(chars[2...3]), nil, 16)) / 255 green = CGFloat(strtoul(String(chars[4...5]), nil, 16)) / 255 blue = CGFloat(strtoul(String(chars[6...7]), nil, 16)) / 255 default: return nil } self.init(red: red, green: green, blue: blue, alpha: alpha) } } 

 if let textColor = UIColor(hexString: "00F") { print(textColor) // r 0.0 g 0.0 b 1.0 a 1.0 } UIColor(hexString: "#00F") // r 0.0 g 0.0 b 1.0 a 1.0 UIColor(hexString: "#0000FF") // r 0.0 g 0.0 b 1.0 a 1.0 UIColor(hexString: "#FF0000FF") // r 0.0 g 0.0 b 1.0 a 1.0