Antworten:
Grundelemente können in Objekte mit @()
Ausdruck konvertiert werden . Der kürzeste Weg besteht also darin int
, NSNumber
die Zeichenfolgendarstellung mit der folgenden stringValue
Methode zu transformieren und aufzunehmen :
NSString *strValue = [@(myInt) stringValue];
oder
NSString *strValue = @(myInt).stringValue;
stringValue
, aber alle haben description
- als gute Praxis ist es besser, sich an die Verwendung zu gewöhnen description
( NSNumber
macht sich hier keine Sorgen). Versuchen Sie dies ( description
druckt das Datum aus, stringValue
stürzt aber ab):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
@(myInt)
ist ein Boxed-Ausdruck für [NSNumber numberWithInt:]
und gibt immer eine NS-Nummer zurück, wenn ein int angegeben wird. [NSNumber stringValue]
gibt immer einen NSString zurück. Im Code Ihres Kommentars ist das erzwungene Casting mit (id)
und Zuweisen zu einem anderen Typ ein klarer Programmierfehler: Sie sollten dies niemals tun. Es ist, als würde man eine Methode durcheinander bringen und dann darüber streiten, dass diese Methode nicht das tut, was sie ursprünglich getan hat.
!
) zu verwenden, und Sie werden feststellen, dass Sie ihn in Objective-C falsch gemacht haben. Wenn das Objekt test
nicht von Ihnen erstellt wurde, liegt es nicht in Ihrer Verantwortung. Sie können versuchen, isKindOfClass:
alle empfangenen Parameter abzurufen, aber selbst das kann getäuscht werden (indem Sie beispielsweise eine Struktur anstelle eines NSObjects übergeben). Tun Sie es also nicht: Dokumentieren Sie einfach explizit die erwarteten Typen.
(id)
ist natürlich ein Fehler, es war nur, um den Punkt zu demonstrieren, an dem IMO description
bevorzugt wird stringValue
(ich kann mich irren, habe seit Jahren nicht mehr in ObjC programmiert)
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
@(myInt)
ist ein Boxed-Ausdruck und gibt eine NSNumber zurück.
Wenn diese Zeichenfolge dem Endbenutzer präsentiert werden soll, sollten Sie sie verwenden NSNumberFormatter
. Dadurch werden Tausende Trennzeichen hinzugefügt und die Lokalisierungseinstellungen für den Benutzer berücksichtigt:
NSInteger n = 10000;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
NSString *string = [formatter stringFromNumber:@(n)];
In den USA würde das zum Beispiel eine Zeichenfolge erzeugen 10,000
, in Deutschland jedoch 10.000
.
NSString *strValue = @(myInt).stringValue;