11

クラスでがCGPoint宣言されています。それがと等しくないかどうかを確認しようとしましたが、次のエラーが発生しました。UIViewviewControllerCGPointCGPointZeroInvalid operands to binary expression ('CGPoint' (aka 'struct CGPoint') and 'CGPoint')

これは if ステートメントです。

if (joystick.velocity != CGPointZero)

エラーは != を指していますが、なぜエラーが発生するのかわかりません。

joystickUIViewクラスで、次のCGPoint velocityように宣言されています。

@property(nonatomic) CGPoint velocity;

4

1 に答える 1

17

これを試して:

if (!CGPointEqualToPoint(joystick.velocity, CGPointZero))

説明: CGPoint は実際には構造体です。バイナリ オペランド ("==" または "!=") は、プリミティブ値を比較するためにのみ使用されます。通常は、実際にはメモリ位置を表す整数であるポインターを比較するのに役立ちます。

何かへの参照ではなく構造体があるため、構造体内の各値を比較する必要がありますが、幸いなことに、アップルはCGPointの場合にこれを実行するマクロをすでに実装しています.

興味がある場合は、上記のマクロをコマンドクリックして実装を確認できます。

__CGPointEqualToPoint(CGPoint point1, CGPoint point2)
{
  return point1.x == point2.x && point1.y == point2.y;
}
于 2013-08-01T17:48:24.693 に答える