Đối với kiểm tra bình đẳng, bạn có thể sử dụng isEqualToNumber
mà kiểm tra nếu một trong hai nội dung id
hoặc tương đương (với sau này sử dụng compare
):
if ([a isEqualToNumber:b]) // if a == b
Không chắc tại sao họ cũng không triển khai các phương thức tiện lợi isGreaterThanNumber
và isLessThanNumber
(và có thể cả >=
và <=
), vì phương thức compare
bên dưới có vẻ hơi khó khăn.
Đối với kiểm tra sự bất bình đẳng, chỉ cần sử dụng compare
trực tiếp (bạn cũng có thể làm điều này cho bình đẳng như có thể được nhìn thấy từ cái đầu tiên bên dưới):
if ([a compare:b] == NSOrderedSame) // if (a == b)
if ([a compare:b] == NSOrderedAscending) // if (a < b)
if ([a compare:b] == NSOrderedDescending) // if (a > b)
if ([a compare:b] != NSOrderedSame) // if (a != b)
if ([a compare:b] != NSOrderedAscending) // if (a >= b)
if ([a compare:b] != NSOrderedSescending) // if (a <= b)
chi tiết có thể được tìm thấy trên NSNumber class documentation page.
Hãy nhớ không có gì ngăn cản bạn từ việc tạo helper riêng chức năng của bạn mà sẽ, ví dụ, cho phép mã như là:
if (nsnComp1 (a, ">=", b)) ... // returns true/false (yes/no)
hay:
if (nsnComp2 (a, b) >= 0) ... // returns -1/0/+1
mặc dù nó ít Objective-C và nhiều C :-) Nó phụ thuộc vào việc định nghĩa của bạn về "thanh lịch" bị ràng buộc chủ yếu bởi hiệu quả hay khả năng đọc. Cho dù đó là thích hợp với tùy chọn intValue
của bạn là một quyết định bạn sẽ cần phải tự mình làm.
Nếu bạn muốn, bạn có thể viết một thể loại thêm các phương thức như '[a greaterThan: b]' và '[a equalTo: b]' – pasawaya
Có thể biên dịch của các toán tử sẽ xuất hiện dưới dạng phần mở rộng của số này. cú pháp. '@ 1' đã trở thành' [NSNumber numberWithInt: 1] '- không có lý do gì mà' @ 1> @ 2' không thể được phép và viết lại thành '[@ 1 isGreaterThan: @ 2]' (tốt, không có lý do nào ngoài sự nhầm lẫn có thể xảy ra: "Tại sao tôi không thể làm' nếu (1> @ 2) '?"). –
yea bạn nói đúng, nó sẽ loại bỏ các so sánh con trỏ ở mức độ thấp ... nhưng chúng luôn có thể làm điều gì đó như @ 1 @> = @ 2 và sau đó triển khai largerThanOrEqualTo trong NSNumber, vì vậy nó sẽ được dịch thành [@ 1 greaterThanOrEqualTo: @ 2] ... theo cách này bạn có thể giữ số học con trỏ của bạn cũng như so sánh logic – 0xSina