二进制运算符'<'不能应用于'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
}
}
错误是告诉你什么是错的。 A CGPoint
是一个带有x
和y
值的结构。将点与单个整数值进行比较没有任何意义。
您需要将点x或y位置与某个值进行比较,而不是整个点。
guard location < 100 else { return }
可能会读
guard location.y < 100 else { return }
代替。
邓肯,我得到了程序运行,但守卫甚至没有工作。我的代码设置是否正确地执行我上面所说的要求? –
修改您的问题,在您的帖子结尾处显示您的更新代码。同时显示包含警戒语句的整个功能。你需要告诉我们你想要发生什么。如果位置的x或y位置大于或等于100,您是否要退出该功能? –
@LeoDabus,你**可以在循环内返回。它从循环中退出并从函数返回。尝试一下。有用。 –
投到CGFloat或尝试使用100.0 – koropok
我曾尝试过,但是当我投入CGFloat它说给出了相同的错误,当我使用100.0它说我使用双重 –
铸造没有任何意义。你不能将一个CGPoint转换成简单的标量,比如'Double'或者''CGFloat''。看到我的答案。 –