2013-08-01 21 views
10

Tôi có một CGPoint tuyên bố trong một lớp học UIView, trong viewController của tôi, tôi cố gắng để kiểm tra xem rằng CGPoint không bằng CGPointZero, nhưng tôi nhận được lỗi này: Invalid operands to binary expression ('CGPoint' (aka 'struct CGPoint') and 'CGPoint')séc Cant nếu CGPoint không bằng CGPointZero

Đây là câu lệnh if:

if (joystick.velocity != CGPointZero) 

Lỗi chỉ đến! = và tôi không biết tại sao lỗi này xảy ra với tôi.

joystickUIView lớp, CGPoint velocity được khai báo như thế này:

@property(nonatomic) CGPoint velocity;

Trả lời

16

Hãy thử điều này:

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

Giải thích: Một CGPoint thực sự là một struct. Toán hạng nhị phân ("==" hoặc "! =") Chỉ được sử dụng để so sánh các giá trị nguyên thủy, thường hữu ích khi so sánh các con trỏ, mà trên thực tế là các số nguyên đại diện cho vị trí bộ nhớ.

Khi bạn có cấu trúc chứ không phải tham chiếu đến thứ gì đó, bạn sẽ phải so sánh từng giá trị bên trong cấu trúc của mình, nhưng may mắn là Apple đã triển khai macro thực hiện điều này cho bạn trong trường hợp CGPoint.

Nếu bạn tò mò, bạn có thể chỉ huy chuột lên vĩ mô trên và xem việc thực hiện:

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

Bạn đánh bại tôi vào câu trả lời này :) –

+0

Gonna thử loại này bây giờ nó là một cái gì đó như thế này tôi nghĩ rằng nó sẽ được, giống như phương thức isEqualToString. – Arbitur

Các vấn đề liên quan