我得到两个错误。当我使用<=和>=时,它会给我错误:
Binary Operator '>= &<='不能应用于CGFloat和Int类型的操作数
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
var speedOfTouch = 30
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
if location.x < CGRectGetMidX(self.frame) {
square.position.x <= speedOfTouch
square.physicsBody?.applyImpulse(CGVector(dx: -40, dy: 0))
}
else {
square.position.x >= speedOfTouch
square.physicsBody?.applyImpulse(CGVector(dx: 40, dy: 0))
}
}
}
我需要帮助!
改变一行:
let speedOfTouch = CGFLoat(30)
它不起作用,因为你不能比较两种不同的类型,因为编译器声明
swift编译器认为尝试比较两种不同的类型是程序员的错误。
把你的代码改成:
var speedOfTouch = 30 as CGFloat
我认为至少有两个问题。
-
speedOfTouch
具有Int
类型,因为您没有指定任何其他类型。因此,在表达式square.position.x <= speedOfTouch
中,您试图比较CGFloat
和Int
。Swift不会自动在数值类型之间进行转换,也没有定义左边取
CGFloat
,右边取Int
的<=
操作符,所以你不能比较两个不同类型的值。你可以解决这个问题,例如,显式地将
speedOfTouch
声明为CGFloat
:var speedOfTouch: CGFloat = 30
-
另一个问题,它不会给你一个编译器错误,是你已经写了
square.position.x <= speedOfTouch
作为一个语句。您正在比较两个值,但是您没有对比较的结果做任何操作。在优化的(发布)版本中,编译器可能会完全消除比较。那你为什么要这么做?
你可能想对比较的结果做点什么。例如,也许您想这样做:
if ((location.x < CGRectGetMidX(self.frame)) && (square.position.x <= speedOfTouch)) { square.physicsBody?.applyImpulse(CGVector(dx: -40, dy: 0)) }