我收到两个错误。当我使用< =和> =时,它会给我错误:
二元运算符'> =& < ='不能应用于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))
}
}
}
我需要帮助!
答案 0 :(得分:0)
更改一行:
let speedOfTouch = CGFLoat(30)
它不起作用,因为您无法比较两种不同的类型作为编译器状态
答案 1 :(得分:0)
swift编译器认为尝试比较两种不同的类型是程序员的错误。
只需将您的代码更改为:
var speedOfTouch = 30 as CGFloat
答案 2 :(得分:0)
我至少看到两个问题。
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))
}