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

Swift开发中如何从CGColorSpace提取sRGB IEC61966-2.1等配置文件名

从CGColorSpace中提取颜色空间配置名称的方法

1. 高版本系统原生方案(iOS 15+ / macOS 12+ / tvOS 15+ / watchOS 8+)

Apple在上述版本起为CGColorSpace新增了原生的name属性,可直接获取到目标字符串:

let red = UIColor.red
guard let colorSpace = red.cgColor.colorSpace,
      let spaceName = colorSpace.name as? String else {
    print("无法获取颜色空间名称")
    return
}
print(spaceName) // 输出结果:sRGB IEC61966-2.1

注意:name属性返回值为CFString?类型,需要强制转换为Swift的String类型使用

2. 低版本系统兼容方案

如果需要适配更早的系统版本,可以通过解析CGColorSpace的描述字符串来提取对应值,其输出结构固定为<CGColorSpace 内存地址> (参数1; 参数2; 颜色空间名称; 参数4),我们可以直接拆分字符串取值:

func fetchColorSpaceCustomName(_ space: CGColorSpace) -> String? {
    let fullDesc = space.description
    // 提取括号内的所有参数
    guard let bracketRange = fullDesc.range(of: #"\((.+?)\)"#, options: .regularExpression) else {
        return nil
    }
    let paramStr = String(fullDesc[bracketRange].dropFirst().dropLast())
    // 按分号拆分参数
    let paramList = paramStr.components(separatedBy: ";").map {
        $0.trimmingCharacters(in: .whitespacesAndNewlines)
    }
    // 颜色空间名称固定为第三个参数
    return paramList.count >= 3 ? paramList[2] : nil
}

// 调用示例
if let colorSpace = red.cgColor.colorSpace {
    let targetName = fetchColorSpaceCustomName(colorSpace)
    print(targetName ?? "未知颜色空间")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:45:02