arc4random和arm64与swift

时间:2014-06-24 03:03:51

标签: ios sprite-kit swift xcode6

我正在尝试在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()有关,产生了一些它不喜欢的东西。关于如何解决这个问题的任何想法?

1 个答案:

答案 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);