Dla kontroli równości, można użyć isEqualToNumber
który sprawdza czy też zawartość id
lub jest równa (z tym ostatnim użyciu compare
):
if ([a isEqualToNumber:b]) // if a == b
Nie pewny dlaczego one również nie wdrożyły wygodnych metod (i prawdopodobnie także: >=
i <=
), ponieważ poniższa metoda wydaje się być trochę niezgrabna.
Dla kontroli nierówności, wystarczy użyć compare
bezpośrednio (można to zrobić także za równością jak widać od pierwszego poniżej):
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)
Szczegóły można znaleźć na NSNumber class documentation page.
Pamiętaj, nic nie uniemożliwia tworzenie własnej pomocnika funkcji, które na przykład pozwalają kod jak:
if (nsnComp1 (a, ">=", b)) ... // returns true/false (yes/no)
czyli
if (nsnComp2 (a, b) >= 0) ... // returns -1/0/+1
chociaż jest mniej Objective-C i więcej C :-) To zależy od tego, czy twoja definicja "eleganckiego" jest związana przede wszystkim wydajnością czy czytelnością. To, czy preferujesz opcję intValue
, to decyzja, którą musisz podjąć sam.
Jeśli chcesz, możesz napisać metodę dodawania kategorii, taką jak '[a betterThan: b]' i '[a equalTo: b]' – pasawaya
Jest możliwe, że ponowne pisanie operatorów przez operatorów będzie w końcu pojawiać się jako rozszerzenie tej liczby literałów składnia. '@ 1' już staje się' [NSNumber numberWithInt: 1] '- nie ma powodu, że' @ 1> @ 2' nie mógłby być dozwolony i przepisany jako '[@ 1 isGreaterThan: @ 2]' (no cóż, bez powodu oprócz możliwego zamieszania: "Dlaczego nie mogę tego zrobić? Jeśli (1> @ 2)"? "). –
Tak, masz rację, to zabrałoby porównawcze wskaźniki niskiego poziomu ... ale zawsze można było zrobić coś takiego jak @ 1 @> = @ 2, a następnie zaimplementować greaterThanOrEqualTo w NSNumber, więc byłoby to przetłumaczone jako [@ 1 greaterThanOrEqualTo: @ 2] ... w ten sposób możesz zachować arytmetyczne wskaźniki, jak również porównania logiczne. – 0xSina