使用类型为"const CGFloat *"(又名"const float *")的表达式初始化"CGFloat *"(又名"const float *")会丢弃限定符)



当我尝试使用以下代码获得CGColor的组件时:

CGFloat *components = CGColorGetComponents(customizedCGColor);

得到

的警告

使用类型为'const CGFloat *'(又名'const float *')的表达式初始化'CGFloat *'(又名'const float *')将放弃限定符)。

这是什么,CGFloat *实际上是什么意思的细节,为什么不使用CGFloat

颜色是根据它们的红色,绿色,蓝色和alpha强度定义的,该方法返回这些组件的数组;因此:

const CGFloat *components = CGColorGetComponents(customizedCGColor);
CGFloat red = components[0];
CGFloat blue = components[1];
CGFloat green = components[2];
CGFloat alpha = components[3];

然而,返回的组件数量确实取决于所使用的颜色空间。

你得到错误的原因是你用来保存返回数组的变量不是const,因此是一个错误的类型。

它被定义为const的原因是因为该方法不希望调用者通过它返回的数组改变颜色组件;例如,如果您输入:

const CGFloat *components = CGColorGetComponents(customizedCGColor);
components[0] = newRed;

编译器将生成一个错误,因为你不能修改const数组

您正在尝试将const CGFloat分配给CGFloat,这就是为什么您会收到此警告。

CGFloat变量定义const

const CGFloat *components = CGColorGetComponents(customizedCGColor);

按如下方式更新声明:

CGFloat const *components = CGColorGetComponents(customizedCGColor);

相关内容

最新更新