swiftui 设置十六进制的颜色

222 阅读1分钟
extension Color {
    init(hex: String) {
        let hex = hex.trimmingCharacters(in: .whitespacesAndNewlines).replacingOccurrences(of: "#", with: "")
        var rgbValue: UInt64 = 0
        Scanner(string: hex).scanHexInt64(&rgbValue)
        
        let a, r, g, b: UInt64
        switch hex.count {
        case 8: // 包含 Alpha (如 #FFFF9CD4)
            a = (rgbValue >> 24) & 0xFF
            r = (rgbValue >> 16) & 0xFF
            g = (rgbValue >> 8) & 0xFF
            b = rgbValue & 0xFF
        case 6: // 不包含 Alpha (如 #FF9CD4)
            a = 255
            r = (rgbValue >> 16) & 0xFF
            g = (rgbValue >> 8) & 0xFF
            b = rgbValue & 0xFF
        default:
            a = 255
            r = 0
            g = 0
            b = 0
        }
        
        self.init(
            .sRGB,
            red: Double(r) / 255,
            green: Double(g) / 255,
            blue: Double(b) / 255,
            opacity: Double(a) / 255
        )
    }
}

使用 Color(hex: "FFFF9CD4")