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

Hex codes/RGB values for SwiftUI colors?

是否有 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, 0, 0)
        return uiColor.getRed(&r, green: &g, blue: &b, alpha: &a) ? (r, g, b, a) : nil
    }
    var hexaRGB: String? {
        guard let (red, green, blue, _) = rgba else { return nil }
        return String(format: "#%02x%02x%02x",
            Int(red * 255),
            Int(green * 255),
            Int(blue * 255))
    }
    var hexaRGBA: String? {
        guard let (red, green, blue, alpha) = rgba else { return nil }
        return String(format: "#%02x%02x%02x%02x",
            Int(red * 255),
            Int(green * 255),
            Int(blue * 255),
            Int(alpha * 255))
    }
}

Color.purple.hexaRGB     // "#af52de"
Color.purple.hexaRGBA    // "#af52deff"
if let (red, green, blue, alpha) = Color.purple.rgba {
    red   // 0.686274528503418
    green // 0.321568638086319
    blue  // 0.8705882430076599
    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
        )
    }
    
}