2013-08-01 8 views
10

Mam CGPoint zadeklarowana w klasie UIView moim viewController staram się sprawdzić, czy to CGPoint nie jest równa CGPointZero, ale pojawia się ten błąd: Invalid operands to binary expression ('CGPoint' (aka 'struct CGPoint') and 'CGPoint')mogę sprawdzić, czy CGPoint nie jest równa CGPointZero

To jest instrukcja if:

if (joystick.velocity != CGPointZero) 

Błąd wskazuje na! = i nie wiem, dlaczego powoduje błąd.

joystick jest UIView klasy CGPoint velocity jest zadeklarowana następująco:

@property(nonatomic) CGPoint velocity;

Odpowiedz

16

Spróbuj tego:

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

Objaśnienie: CGPoint jest rzeczywiście struct. Operand binarny ("==" lub "! =") Służy tylko do porównywania wartości pierwotnych, zwykle użytecznych do porównywania wskaźników, które w rzeczywistości są liczbami całkowitymi reprezentującymi pozycję pamięci.

Ponieważ masz strukturę, a nie odniesienie do czegoś, musisz porównać każdą wartość wewnątrz swojej struktury, ale na szczęście jabłko już zaimplementowało makro, które wykonuje to za Ciebie w przypadku CGPoint.

Jeśli jesteś ciekawy, można Command makro powyżej i zobaczyć realizację:

__CGPointEqualToPoint(CGPoint point1, CGPoint point2) 
{ 
    return point1.x == point2.x && point1.y == point2.y; 
} 
+0

Pobiłeś mnie do tej odpowiedzi :) –

+0

Zamierzam spróbować to teraz było coś takiego się spodziewałem być, podobnie jak metoda isEqualToString. – Arbitur