You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI 自定义hex转Color扩展初始化颜色与输入hex值不匹配问题

问题原因

sRGB 色彩空间的 Color 初始化方法要求 red/green/blue 三个参数的取值范围为 0~1 的浮点数,你当前代码直接传入了 0~255 区间的原始数值,所有大于1的色值都会被系统默认截断为1,最终渲染出来的颜色自然和目标色不符。

修正后的代码

extension Color {
    init(hexColor: String) {
        // 过滤非字母数字字符,自动去除#等前缀符号
        let hex = hexColor.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
        let hexNumber = Int(hex, radix: 16) ?? 0
        // 将0~255区间的原始色值转换为0~1区间的标准参数
        let redColor: Double = Double((hexNumber >> 16) & 0xFF) / 255.0
        let greenColor: Double = Double((hexNumber >> 8) & 0xFF) / 255.0
        let blueColor: Double = Double((hexNumber >> 0) & 0xFF) / 255.0
        self.init(.sRGB, red: redColor, green: greenColor, blue: blueColor, opacity: 1)
    }
}

可选优化点

  • 新增3位短hex格式兼容,比如将#FFF自动补全为#FFFFFF再做计算
  • 新增8位带透明通道的hex支持,取hex最高两位数值计算alpha透明度参数

内容的提问来源于stack exchange,提问作者Rajesh Budhiraja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 07:54:02