Wie erhöhe ich eine NSNumber?
dh myNSNumber ++
Wie erhöhe ich eine NSNumber?
dh myNSNumber ++
Antworten:
Update: Zu Ihrer Information, ich persönlich mag die einzeiligen Antworten von BoltClock und DarkDusts besser. Sie sind prägnanter und erfordern keine zusätzlichen Variablen.
Um ein zu erhöhen NSNumber
, müssen Sie seinen Wert abrufen, diesen erhöhen und in einem neuen speichern NSNumber
.
Zum Beispiel für das NSNumber
Halten einer Ganzzahl:
NSNumber *number = [NSNumber numberWithInt:...];
int value = [number intValue];
number = [NSNumber numberWithInt:value + 1];
Oder für das NSNumber
Halten einer Gleitkommazahl:
NSNumber *number = [NSNumber numberWithDouble:...];
double value = [number doubleValue];
number = [NSNumber numberWithDouble:value + 1.0];
...
? Das ist eine Pseudocode-Referenz, oder? XCode nicht...
...
ist nur ein Platzhalter für eine beliebige Nummer.
NSNumber
Objekte sind unveränderlich; das Beste was Sie tun können , ist den Grundwert zu packen, erhöhen sie dann das Ergebnis in seinem eigenen wickeln NSNumber
Objekt:
NSNumber *bNumber = [NSNumber numberWithInt:[aNumber intValue] + 1];
Für alle, die die neueste Version von Xcode verwenden (Schreiben ab 4.4.1, SDK 5.1), können Sie mithilfe von Objektliteralen den Code noch ein bisschen mehr bereinigen ...
NSNumber *x = @(1);
x = @([x intValue] + 1);
// x = 2
Es ist immer noch eine Qual, mit dem Boxen und Auspacken umzugehen, um einfache Operationen durchzuführen, aber es wird besser oder zumindest kürzer.
Setzen Sie sie alle zusammen, und Sie haben:
myNSNumber = @(myNSNumber.intValue + 1);
NSNumber
Objekte unveränderlich sind (?)
Ich mag den Punktausdruck, weil er prägnanter ist und deshalb von IOS in erster Linie unterstützt wird:
myNSNumber = [NSNumber numberWithInt:myNSNumber.intValue + 1];
Wenn Sie damit einen ganzzahligen Wert speichern:
myNSNumber = @(myNSNumber.longLongValue + 1);
Für Gleitkomma-Inhalte lautet die kurze Antwort wie folgt, aber es ist eine schlechte Idee, dies zu tun. Sie verlieren an Präzision und wenn Sie später einen Vergleich wie [myNSNumber isEqual: @ (4.5)] durchführen, werden Sie möglicherweise überrascht sein ::
myNSNumber = @(myNSNumber.floatValue + 1);
Wenn Sie Gleitkommazahlen berechnen müssen, die in Objective-C als Objekte dargestellt werden (dh wenn Sie sie in Arrays, Wörterbüchern usw. ablegen müssen), sollten Sie diese verwenden NSDecimalNumber
.
Verwenden Sie eine Kategorie, um die zukünftige Verwendung zu vereinfachen. Hier ist eine Grundidee.
- (void)incrementIntBy:(int)ammount {
self = [NSNumber numberWithInt:(self.intValue + ammount)];
}
Viele gute Infos in den Antworten auf diese Frage. Ich habe die ausgewählte Antwort in meinem Code verwendet und es hat funktioniert. Dann fing ich an, den Rest der Beiträge zu lesen und vereinfachte den Code sehr. Es ist etwas schwieriger zu lesen, wenn Sie nicht mit den Änderungen in der Notation vertraut sind, die in Xcode 5 eingeführt wurden, aber es ist viel sauberer. Ich könnte es wahrscheinlich nur eine Zeile machen, aber dann ist es ein bisschen zu schwer herauszufinden, was ich tue.
Ich speichere eine NS-Nummer in einem Wörterbuch und möchte sie erhöhen. Ich bekomme es, konvertiere es in ein int, erhöhe es, während ich es in eine NSNumber konvertiere, und setze es dann wieder in das Wörterbuch ein.
Alter Code
NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
int correctValue = [correct intValue];
correct = [NSNumber numberWithInt:correctValue + 1];
[scoringDictionary removeObjectForKey:@"correct"];
scoringDictionary[@"correct"] = correct;
Neuer Code
NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
scoringDictionary[@"correct"] = @(correct.intValue + 1);
NSNumber *
Überprüfen Sie bei der Verwendung immer, ob die primitiven Typen ausreichen.