【问题标题】:CGFloat to $ST4 Swift Build ErrorCGFloat 到 $ST4 Swift 构建错误
【发布时间】:2014-08-27 01:03:06
【问题描述】:

刚刚在 Swift 中处理 UIKit / CoreGraphics 的东西,我一直遇到这个错误 - “无法将 CGFloat 转换为类型 ST$4”,与 atan2f() 一致。

    var location : CGPoint = recogniser.locationInView(spinnerImage)

    var spinnerXCentre = spinnerImage.center.x
    var spinnerYCentre = spinnerImage.center.y

    var dx = location.x - spinnerXCentre
    var dy = location.y - spinnerYCentre

    var a  = atan2f(dx, dy)

据我所知,我认为 dx 和 dy 将是双精度数,我尝试将它们向下转换为浮点数,但无济于事。然后,如果我将该行更改为:

var a  = atan2f(dx, (-1 * dy))

然后我得到一个不同的错误,指出“接受提供的参数的运算符 * 没有重载”-我肯定在这里遗漏了一些东西,有人愿意启发我吗?

【问题讨论】:

    标签: ios cocoa uikit swift


    【解决方案1】:

    看看这个https://developer.apple.com/library/prerelease/ios/samplecode/Adventure-Swift/Listings/Adventure_Adventure_Shared_Utilities_GraphicsUtilities_swift.html

    #if arch(arm) || arch(i386)
    func sin(x: CGFloat) -> CGFloat {
        return sinf(x)
    }
    
    func cos(x: CGFloat) -> CGFloat {
        return cosf(x)
    }
    func hypot(x: CGFloat, y: CGFloat) -> CGFloat {
        return hypotf(x, y)
    }
    
    func atan2(x: CGFloat, y: CGFloat) -> CGFloat {
        return atan2f(x, y)
    }
    #endif
    

    【讨论】:

      【解决方案2】:

      dxdy 的类型为 CGFloat,在 32 位架构上为 Float,并且 Double 在 64 位架构上。另一方面,atan2f() 接受 Float 论据。

      Swift 不会隐式转换类型,因此您必须添加显式转换。 在这种情况下,您应该将所有内容都转换为 Double 并改用 atan2 atan2f(),以便您在 64 位上获得尽可能高的精度。

      var a  = atan2(Double(dx), Double(dy))
      var b  = atan2(Double(dx), -1.0 * Double(dy))
      

      或者,您可以将dxdy 声明为Double 类型,在这种情况下 在分配期间完成转换:

      var dx : Double = location.x - spinnerXCentre
      var dy : Double = location.y - spinnerYCentre
      var a  = atan2(dx, dy)
      

      注意atan2() 的第一个参数是y-component,所以你可能想要

      var a  = atan2(Double(dy), Double(dx))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-10
        • 1970-01-01
        • 1970-01-01
        • 2011-11-10
        • 2014-02-13
        • 2016-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多