二进制运算符'<'不能应用于'CGPoint'和'Int'类型的操作数使用Guard

问题描述:

在我的游戏中,我有一个可以滑动的球。我试图做到这一点,如果用户不能将球拖到特定点以上。但是,如果他们轻扫并意外地进入这一点,那么球仍然会移动。每当我把guard location < 100 else {return},错误:二进制运算符'<'不能应用于'CGPoint'和'Int'类型的操作数使用Guard

"Binary operator '<' cannot be applied to operands of type 'CGPoint' and 'Int'"

显示出来,我不知道如何解决它。顺便说一下,guard是否会在用户意外超出界限时仍能保持其速度?

这里是我的代码:

for touch in touches { 
    let location = touch.location(in: self) 
    let node = self.atPoint(location) 

    guard location < 100 else { return } 
    if ball.frame.contains(location) { 
     touchPoint = location 
     touching = true 
    } 
} 
+0

投到CGFloat或尝试使用100.0 – koropok

+0

我曾尝试过,但是当我投入CGFloat它说给出了相同的错误,当我使用100.0它说我使用双重 –

+0

铸造没有任何意义。你不能将一个CGPoint转换成简单的标量,比如'Double'或者''CGFloat''。看到我的答案。 –

错误是告诉你什么是错的。 A CGPoint是一个带有xy值的结构。将点与单个整数值进行比较没有任何意义。

您需要将点x或y位置与某个值进行比较,而不是整个点。

guard location < 100 else { return } 

可能会读

guard location.y < 100 else { return } 

代替。

+0

邓肯,我得到了程序运行,但守卫甚至没有工作。我的代码设置是否正确地执行我上面所说的要求? –

+0

修改您的问题,在您的帖子结尾处显示您的更新代码。同时显示包含警戒语句的整个功能。你需要告诉我们你想要发生什么。如果位置的x或y位置大于或等于100,您是否要退出该功能? –

+0

@LeoDabus,你**可以在循环内返回。它从循环中退出并从函数返回。尝试一下。有用。 –