0

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

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

    }
}

我需要帮助!

4

3 回答 3

0

换一行:

let speedOfTouch = CGFLoat(30)

它不起作用,因为您无法像编译器所述那样比较两种不同的类型

于 2015-07-22T20:22:39.263 回答
0

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

只需将您的代码更改为:

var speedOfTouch = 30 as CGFloat
于 2015-07-22T20:23:18.520 回答
0

我看到至少两个问题。

  1. speedOfTouch有类型Int,因为您没有指定任何其他类型。所以在表达式square.position.x <= speedOfTouch中,你试图比较 aCGFloat和 an Int

    Swift 不会自动在数值类型之间进行转换,也没有定义一个左取 a 右取 an的<=运算符,因此您无法比较不同类型的两个值。CGFloatInt

    例如,您可以通过明确声明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))
    }
    
于 2015-07-22T20:26:49.590 回答