【问题标题】:arc4random and arm64 with swift [duplicate]快速的 arc4random 和 arm64 [重复]
【发布时间】:2014-06-24 03:03:51
【问题描述】:

我正在尝试在 sprite kit 中创建一个生成随机颜色的函数。这是我使用的代码:

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() 生成它不喜欢的东西有关。有关如何解决此问题的任何想法?

【问题讨论】:

标签: ios sprite-kit swift xcode6


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-11-14
    • 2012-07-20
    • 2015-02-05
    • 1970-01-01
    • 2012-08-08
    • 2016-06-16
    • 2013-05-30
    • 1970-01-01
    • 2012-07-17
    相关资源
    最近更新 更多