SwiftUI颜色的十六进制代码/ RGB值?

问题描述

是否有SwiftUI颜色的十六进制代码或RGB值的已编译列表?我想对Color.purple都知道,但似乎找不到任何好的资源。有没有办法以编程方式确定十六进制代码或RGB值?或者,也许我可以看一下Color的某些属性?预先感谢!

解决方法

如果您在SwiftUI 2中进行编码,则可以将Color转换为UIColor并使用getRed方法获取红色,绿色,蓝色和Alpha分量。一旦有了组件,就可以将值转换为六进制字符串:


extension Color {
    var uiColor: UIColor { .init(self) }
    typealias RGBA = (red: CGFloat,green: CGFloat,blue: CGFloat,alpha: CGFloat)
    var rgba: RGBA? {
        var (r,g,b,a): RGBA = (0,0)
        return uiColor.getRed(&r,green: &g,blue: &b,alpha: &a) ? (r,a) : nil
    }
    var hexaRGB: String? {
        guard let rgba = rgba else { return nil }
        return String(format: "#%02x%02x%02x",Int(rgba.red*255),Int(rgba.green*255),Int(rgba.blue*255))
    }
    var hexaRGBA: String? {
        guard let rgba = rgba else { return nil }
        return String(format: "#%02x%02x%02x%02x",Int(rgba.red * 255),Int(rgba.green * 255),Int(rgba.blue * 255),Int(rgba.alpha * 255))
    }
}

Color.purple.hexaRGB     // "#af52de"
Color.purple.hexaRGBA    // "#af52deff"
if let rgba = Color.purple.rgba {
    rgba.red   // 0.686274528503418
    rgba.green // 0.321568638086319
    rgba.blue  // 0.8705882430076599
    rgba.alpha // 1
}
,

像这样使用它不好吗?

    import UIKit

extension UIColor {
    
    convenience init(hex:Int,alpha: CGFloat = 1.0) {
        self.init(
            red:   CGFloat((hex & 0xFF0000) >> 16) / 255.0,green: CGFloat((hex & 0x00FF00) >> 8)  / 255.0,blue:  CGFloat((hex & 0x0000FF) >> 0)  / 255.0,alpha: alpha
        )
    }
    
}