Swift 带有错误的CGColor扩展';初始化(红色:绿色:蓝色:alpha)不可用';

Swift 带有错误的CGColor扩展';初始化(红色:绿色:蓝色:alpha)不可用';,swift,init,cgcolor,Swift,Init,Cgcolor,我在这里有点迷路了。我正在编写CGColor的扩展,它从十六进制值(字符串)和可选的alpha值(CGFloat)返回CGColor。返回新的CGColor实例时,发生以下错误: 'init(red:gee:blue:alpha)' is unavailable 提供了以下信息: “init(红色:绿色:蓝色:阿尔法:)”已在此处明确标记为不可用(CoreGraphics.CGColor) 以下是完整的扩展代码: 导入基础 导入核心图形 扩展CGColor{ ///从十六进制值和可选alpha

我在这里有点迷路了。我正在编写CGColor的扩展,它从十六进制值(字符串)和可选的alpha值(CGFloat)返回CGColor。返回新的CGColor实例时,发生以下错误:

'init(red:gee:blue:alpha)' is unavailable
提供了以下信息:

  • “init(红色:绿色:蓝色:阿尔法:)”已在此处明确标记为不可用(CoreGraphics.CGColor)
  • 以下是完整的扩展代码:

    <代码>导入基础 导入核心图形 扩展CGColor{ ///从十六进制值和可选alpha值构造CGColor。 /// ///-参数hex:用于rgb值的十六进制值必须采用“#ffffff”的形式 ///-参数alpha:可选alpha值,范围从0到1.0 /// ///-返回:如果提供的十六进制值无效,则返回CGColor或nil。 静态func from(十六进制:字符串,alpha:CGFloat=1.0)->CGColor{ //不是十六进制值:缺少前缀或字符计数无效 guard hex.hasPrefix(“#”)||hex.count==7 else{ 归零 } 让开始=十六进制索引(十六进制开始索引,偏移量:1) 让hexColor=String(十六进制[开始…]) let scanner=扫描仪(字符串:hexColor) 变量hexNumber:UInt64=0 scanner.scanHexInt64(&hexNumber) 设r=CGFloat((hexNumber&0xff000000)>>16)/255 设g=CGFloat((hexNumber&0x00ff0000)>>8)/255 设b=CGFloat(十六进制数&0x0000ff00)/255 //出现错误:“init(红色:绿色:蓝色:alpha)”不可用 返回CGColor( 红色:r, 格林:g, 蓝色:b, 阿尔法:阿尔法 ) } } [编辑]

    上下文:此代码是针对iOS和macOS的通用框架的一部分。该框架解析(大量)描述几何体和颜色对象的文本文件。颜色作为十六进制值提供

    此CGColor扩展用于从解析的十六进制值返回CGColor

    代码中的一些示例:

    //具有颜色的几何体对象
    公共结构几何{
    公共颜色:颜色
    }
    //几何体对象的颜色定义
    公共结构颜色{
    公共let id:ColorID
    公共let值:字符串
    公共let alpha:Int
    //遗漏了一些代码
    公共颜色:cgColor{
    返回CGColor?.from(十六进制:值,阿尔法:阿尔法值)
    }
    }
    
    如果使用框架的应用程序需要颜色:

    let geometry=fromParsingFramework.geometry()
    如果let color=geometry.color.cgColor
    
    由于该初始值设定项仅适用于macOS,您可以使用以下内容替换该初始值设定项:

    let comps = [r,g,b,alpha]
    return CGColor(colorSpace: CGColorSpace(name: CGColorSpace.sRGB)!, components: comps)
    
    如果您的框架只需要支持iOS 13+/macOS 10.15+,则可以使用新的初始值设定项:

    return CGColor(srgbRed: r, green: g, blue: b, alpha: alpha)
    

    您缺少部分错误:“init(红色:绿色:蓝色:alpha:)在iOS中不可用”。它仅适用于macOS。您是否尝试使用rgb值基本上改变对象的背景颜色?@maddy:该扩展用于自定义通用框架、iOS和macOS@Mike:我以后需要在SceneKit应用程序中使用CGColor。我基本上有一堆描述几何体对象的文本文件。其中一部分是描述为十六进制值的对象的颜色。通过解析这些文件,我想直接使用十六进制值来分配CGColor。您如何在代码中使用此扩展名?在iOS 13中,他可以使用
    init(srgbRed-red:CGFloat,green:CGFloat,blue:CGFloat,alpha:CGFloat)
    @matt-Yes,如果OP的框架仅支持iOS 13/macOS 10.15及更高版本,那么这将是一个很好的选择。@maddy:我刚刚查阅了文档。没有提到CGColor init(red:green:bblue:alpha)仅在macOS中可用。它甚至在框架下声明:iOS2+。“你能解释一下吗?”德克说