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
相关产品推荐
相关产品推荐

