Double 不可转换为 UInt8,Swift 错误

Double is not convertible to UInt8, Swift error

错误:Double 不可转换为 UInt8(在代码的最后一行)

var beweegsnelheid = NSTimeInterval() 
var random3 = CGFloat(arc4random_uniform(100))    
var beweegsnelheidmax = beweegsnelheid * 1.2
var beweegsnelheidmin = beweegsnelheid * 0.8 
   beweegsnelheid = NSTimeInterval(beweegsnelheidmin + (random3/100 * (beweegsnelheidmax - beweegsnelheidmin)))

我做错了什么?

如果它会抱怨 CGFloat 不能转换为 Double,那就更明显了。 Swift 编译器错误有时真的很糟糕。

除了random3,你的所有值都是Double。也将其设置为 Double,您的代码应该可以工作。

let random3 = Double(arc4random_uniform(100))    

您正在尝试将 CGFloat 乘以 Double(CGFloat 是 Fl​​oat 的类型定义)。

random3/100 * (beweegsnelheidmax - beweegsnelheidmin)

不幸的是Swift目前需要在所有地方进行显式类型转换。

var beweegsnelheid = NSTimeInterval()
var random3 = Float(arc4random_uniform(100))
var beweegsnelheidmax = Float(beweegsnelheid * 1.2)
var beweegsnelheidmin = Float(beweegsnelheid * 0.8)
beweegsnelheid = NSTimeInterval(beweegsnelheidmin + (random3/100 * (beweegsnelheidmax - beweegsnelheidmin)))

只需确保始终使用 Float 或 Double,应该不会有问题。