Jak zwiększyć numer NS?
tj. myNSNumber ++
Jak zwiększyć numer NS?
tj. myNSNumber ++
Odpowiedzi:
Aktualizacja: FYI, osobiście bardziej lubię jednowierszowe odpowiedzi BoltClock i DarkDusts. Są bardziej zwięzłe i nie wymagają dodatkowych zmiennych.
Aby zwiększyć wartość an NSNumber
, będziesz musiał uzyskać jego wartość, zwiększyć ją i zapisać w nowym NSNumber
.
Na przykład w przypadku NSNumber
posiadania liczby całkowitej:
NSNumber *number = [NSNumber numberWithInt:...];
int value = [number intValue];
number = [NSNumber numberWithInt:value + 1];
Lub w przypadku NSNumber
posiadania liczby zmiennoprzecinkowej:
NSNumber *number = [NSNumber numberWithDouble:...];
double value = [number doubleValue];
number = [NSNumber numberWithDouble:value + 1.0];
...
oznacza? To odniesienie do pseudokodu, prawda? XCode nie...
...
tylko symbol zastępczy dla dowolnej liczby.
Dla każdego, kto używa najnowszej wersji Xcode (pisząc to od 4.4.1, SDK 5.1), używając literałów obiektowych, można wyczyścić kod nawet trochę bardziej ...
NSNumber *x = @(1);
x = @([x intValue] + 1);
// x = 2
Wciąż trochę uciążliwe radzenie sobie z boksowaniem i rozpakowywaniem wszystkiego, aby wykonywać proste operacje, ale jest coraz lepiej lub przynajmniej krócej.
Połącz je wszystkie razem i masz:
myNSNumber = @(myNSNumber.intValue + 1);
NSNumber
obiekty są niezmienne (?)
Podoba mi się wyrażenie z kropką, ponieważ jest bardziej zwięzłe i dlatego IOS obsługuje je w pierwszej kolejności:
myNSNumber = [NSNumber numberWithInt:myNSNumber.intValue + 1];
Jeśli używasz go do przechowywania wartości integralnej:
myNSNumber = @(myNSNumber.longLongValue + 1);
Dla rzeczy zmiennoprzecinkowych krótka odpowiedź jest następująca, ale to zły pomysł, stracisz precyzję i jeśli będziesz robić jakiekolwiek porównania później, jak [myNSNumber isEqual: @ (4.5)], możesz być zaskoczony :
myNSNumber = @(myNSNumber.floatValue + 1);
Jeśli potrzebujesz matematyki na liczbach zmiennoprzecinkowych reprezentowanych jako obiekty w Objective-C (tj. Jeśli chcesz umieścić je w tablicach, słownikach itp.), Powinieneś użyć NSDecimalNumber
.
Użyj kategorii, aby ułatwić przyszłe użycie. Oto podstawowa idea.
- (void)incrementIntBy:(int)ammount {
self = [NSNumber numberWithInt:(self.intValue + ammount)];
}
Wiele dobrych informacji w odpowiedziach na to pytanie. Użyłem wybranej odpowiedzi w moim kodzie i zadziałało. Potem zacząłem czytać resztę postów i bardzo uprościłem kod. Trochę trudniej jest przeczytać, jeśli nie znasz zmian w notacji wprowadzonych w Xcode 5, ale jest o wiele czystszy. Prawdopodobnie mógłbym zrobić to tylko w jednej linijce, ale wtedy jest trochę zbyt trudno zrozumieć, co robię.
Przechowuję numer NSNumber w słowniku i chcę go zwiększyć. Rozumiem, konwertuję na int, zwiększam podczas konwertowania do NSNumber, a następnie umieszczam z powrotem w słowniku.
Stary kod
NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
int correctValue = [correct intValue];
correct = [NSNumber numberWithInt:correctValue + 1];
[scoringDictionary removeObjectForKey:@"correct"];
scoringDictionary[@"correct"] = correct;
Nowy kod
NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
scoringDictionary[@"correct"] = @(correct.intValue + 1);
NSNumber *
zawsze sprawdzaj, czy typy pierwotne wystarczą.