【问题标题】:Double is not convertible to UInt8, Swift errorDouble 不能转换为 UInt8,Swift 错误
【发布时间】:2015-03-20 14:28:44
【问题描述】:

错误: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)))

我做错了什么?

【问题讨论】:

    标签: xcode swift nstimeinterval


    【解决方案1】:

    您正在尝试将 CGFloat 与 Double 相乘(CGFloat 是 Fl​​oat 的 typedef)。

    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 就不会出现问题。

    【讨论】:

      【解决方案2】:

      如果它抱怨 CGFloat 不能转换为 Double 会更明显。 Swift 编译器错误有时非常糟糕。

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

      let random3 = Double(arc4random_uniform(100))    
      

      【讨论】:

      • 另外,请注意,在编写代码时,除 random3 之外的所有行都等于 0。
      猜你喜欢
      • 1970-01-01
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 2016-11-23
      相关资源
      最近更新 更多