二元运算符'> =& < ='不能应用于CGFloat和Int In Swift类型的操作数

时间:2015-07-22 20:18:58

标签: swift sprite-kit int cgfloat binary-operators

我收到两个错误。当我使用< =和> =时,它会给我错误:

二元运算符'> =& < ='不能应用于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))
        }

    }
}

我需要帮助!

3 个答案:

答案 0 :(得分:0)

更改一行:

let speedOfTouch = CGFLoat(30)

它不起作用,因为您无法比较两种不同的类型作为编译器状态

答案 1 :(得分:0)

swift编译器认为尝试比较两种不同的类型是程序员的错误。

只需将您的代码更改为:

var speedOfTouch = 30 as CGFloat

答案 2 :(得分:0)

我至少看到两个问题。

  1. speedOfTouch的类型为Int,因为您没有指定任何其他类型。因此,在表达式square.position.x <= speedOfTouch中,您尝试比较CGFloatInt

    Swift不会自动在数字类型之间进行转换,也不会定义一个<=运算符,左边是CGFloat,右边是Int ,因此您无法比较不同类型的两个值。

    您可以通过明确声明speedOfTouchCGFloat来解决此问题:

    var speedOfTouch: CGFloat = 30
    
  2. 另一个不会给你编译错误的问题是你写了square.position.x <= speedOfTouch作为语句。您正在比较两个值,但是您没有对比较结果做任何事情。

    在优化(发布)版本中,编译器可能会完全消除比较。那么你为什么要这样做呢?

    您可能想要对比较的结果做些什么。也许,例如,你想这样做:

    if ((location.x < CGRectGetMidX(self.frame))
        && (square.position.x <= speedOfTouch)) {
        square.physicsBody?.applyImpulse(CGVector(dx: -40, dy: 0))
    }