Я придумал следующее решение, но хотел бы знать, есть ли у кого-то более чистый подход к нему (протестировал его на Xcode-Playground):
let colors = CGColorGetComponents( UIColor.greenColor().CGColor )
let hexCol:String = NSString(format: "#%02x%02x%02x", Int(colors[0] * 255.0), Int(colors[1] * 255.0), Int(colors[2] * 255.0))
resulting in #00ff00
где UIColor.greenColor() является примером для любого UIColor.
изменить: Взято из Леонардо Ответ, мне было немного рефакторинга (все его тесты по-прежнему применяются).
extension UIColor {
typealias RGBComponents = (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)
typealias HSBComponents = (hue: CGFloat, saturation: CGFloat, brightness: CGFloat, alpha: CGFloat)
var rgbComponents:RGBComponents {
var c:RGBComponents = (0,0,0,0)
if getRed(&c.red, green: &c.green, blue: &c.blue, alpha: &c.alpha) {
return c
}
return (0,0,0,0)
}
var cssRGBA:String {
return String(format: "rgba(%d,%d,%d, %.02f)", Int(rgbComponents.red * 255), Int(rgbComponents.green * 255), Int(rgbComponents.blue * 255), Float(rgbComponents.alpha))
}
var hexRGB:String {
return String(format: "#%02x%02x%02x", Int(rgbComponents.red * 255), Int(rgbComponents.green * 255), Int(rgbComponents.blue * 255))
}
var hexRGBA:String {
return String(format: "#%02x%02x%02x%02x", Int(rgbComponents.red * 255), Int(rgbComponents.green * 255), Int(rgbComponents.blue * 255), Int(rgbComponents.alpha * 255) )
}
var hsbComponents:HSBComponents {
var c:HSBComponents = (0,0,0,0)
if getHue(&c.hue, saturation: &c.saturation, brightness: &c.brightness, alpha: &c.alpha) {
return c
}
return (0,0,0,0)
}
}
let v1 = UIColor.redColor().rgbComponents.red
let v2 = UIColor.redColor().cssRGBA
let v3 = UIColor.redColor().hexRGBA
let v4test = UIColor.RGBComponents(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)