我正在尝试在sprite工具包中生成一个生成随机颜色的函数。这是我使用的代码:
var hue = Float(arc4random() % 256) / 256.0;
var saturation = Float(arc4random() % 128) / 256.0 + 0.5;
var brightness = Float(arc4random() % 128) / 256.0 + 0.5;
self.color = UIColor(hue: hue, saturation: saturation, brightness: brightness, alpha: 1);
最后一行,当编译到iPad Air和iPhone 5S时,会抛出此错误:
Could not find an overload for 'init' that accepts the supplied arguments
我确定它与arm64上的arc4random()有关,产生了一些它不喜欢的东西。关于如何解决这个问题的任何想法?
答案 0 :(得分:4)
UIColor(hue: saturation: brightness: alpha)
的参数均为CGFloat
类型。您看到的问题是CGFloat
根据体系结构别名为不同类型。对于32位ARM(iPhone 4S和5),它在内部是Float
,但对于arm64,它实际上是Double
。如果您只使用CGFloat
代替Float
进行类型转换,那么它可以正常工作:
var hue = CGFloat(arc4random() % 256) / 256.0;
var saturation = CGFloat(arc4random() % 128) / 256.0 + 0.5;
var brightness = CGFloat(arc4random() % 128) / 256.0 + 0.5;
self.color = UIColor(hue: hue, saturation: saturation, brightness: brightness, alpha: 1);