swift2 “二元运算符>不能应用于两个浮点操作数”错误

ih99xse1  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(244)

我有一个条件,看起来像:

if sqrtf(powf(startTouch.x - (touches.first as! UITouch).locationInView(self.view).y, 2) + powf(startTouch.y-(touches.first as! UITouch).locationInView(self.view).y, 2)) > dragThreshold as! Float {
        self.drag = false;
}

我收到一个错误消息Binary operator > cannot be applied to two Float operands。我不明白为什么我不能检查一个浮点数是否大于另一个浮点数。这个错误消息想告诉我什么?

wvyml7n5

wvyml7n51#

CGPoint的成员是CGFloat类型,假设您在64位体系结构上,用于存储CGFloat的本机类型是Double-尝试将这些计算值视为Double s(使用sqrt()pow(),而不是Float版本)...也将dragThreshold用作Double

nxagd54h

nxagd54h2#

使用最新的Xcode 7 beta 4和SpriteKit的函数override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?),我确实把这个大块分成了像这样的小块:

let dragThreshold: Int = 1
let startTouch = CGPointZero
let pow1 = powf(Float(startTouch.x - touches!.first!.locationInView(self.view).y), 2.0)
let pow2 = powf(Float(startTouch.y-touches!.first!.locationInView(self.view).y), 2.0)
let sq = sqrtf(pow1 + pow2)

if sq > Float(dragThreshold) {
    self.drag = false;
}

这是可行的。基本上为powf参数添加了更多的转换,将2更改为2.0
一般建议-如果你得到一些奇怪的错误,尝试把你的表达式分解成更小的,以隔离问题。

相关问题