Wie konvertiere ich int in NSString?


101

Ich möchte ein intin ein NSStringin Ziel C konvertieren .

Wie kann ich das machen?

Antworten:


147

Grundelemente können in Objekte mit @()Ausdruck konvertiert werden . Der kürzeste Weg besteht also darin int, NSNumberdie Zeichenfolgendarstellung mit der folgenden stringValueMethode zu transformieren und aufzunehmen :

NSString *strValue = [@(myInt) stringValue];

oder

NSString *strValue = @(myInt).stringValue;

12
Etwas weniger ausführlich:NSString *strValue = @(myInt).stringValue;
Distortum

@DielsonSales haben einige Objekte nicht stringValue, aber alle haben description- als gute Praxis ist es besser, sich an die Verwendung zu gewöhnen description( NSNumbermacht sich hier keine Sorgen). Versuchen Sie dies ( descriptiondruckt das Datum aus, stringValuestürzt aber ab):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
Islam Q.

1
@IsQQ. @(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.
Cœur

1
@IsQQ. Versuchen Sie, Ihren Kommentar in Swift zu konvertieren, ohne den Absturzoperator ( !) zu verwenden, und Sie werden feststellen, dass Sie ihn in Objective-C falsch gemacht haben. Wenn das Objekt testnicht 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.
Cœur

@ Cœur, ein Objekt zu werfen (id)ist natürlich ein Fehler, es war nur, um den Punkt zu demonstrieren, an dem IMO descriptionbevorzugt wird stringValue(ich kann mich irren, habe seit Jahren nicht mehr in ObjC programmiert)
Islam Q.

144
NSString *string = [NSString stringWithFormat:@"%d", theinteger];

@Elist Wenn Sie den primitiven Typ kennen, frage ich mich, ob es möglicherweise etwas weniger Overhead gibt, wenn Sie die Zwischen-NSNumber aus Ihrem Code vermeiden. @(myInt)ist ein Boxed-Ausdruck und gibt eine NSNumber zurück.
Cœur

37
int i = 25;
NSString *myString = [NSString stringWithFormat:@"%d",i];

Dies ist eine von vielen Möglichkeiten.


2

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.