Wie konvertiere ich NSInteger in den NSString-Datentyp?

137

Wie konvertiert man NSIntegerin den NSStringDatentyp?

Ich habe folgendes versucht, wobei Monat ein ist NSInteger:

  NSString *inStr = [NSString stringWithFormat:@"%d", [month intValue]];
senthilMuthu
quelle

Antworten:

267

NSIntegers sind keine Objekte, in die Sie sie umwandeln long, um der Definition der aktuellen 64-Bit-Architekturen zu entsprechen:

NSString *inStr = [NSString stringWithFormat: @"%ld", (long)month];

luvieere
quelle
11
Ich habe es versucht, aber ich bekam immer wieder eine Warnung Format specifies type 'int' but the argument has type 'NSInteger *'(aka 'int *'). Stattdessen ging ich laut Apple Docs mitNSString *inStr = [NSString stringWithFormat:@"%d", (int)month];
Steven
8
Beachten Sie, dass auf 64-Bit-Prozessoren wie dem neuen A7-Chip, wenn Ihre App für 64-Bit kompiliert ist, eine NSInteger tatsächlich eine lange und keine int ist. Wenn Sie den Cast (int) month ausführen, ist dies auf 64-Bit-Plattformen für den generischen Fall destruktiv. Wenn Sie ausschließlich auf Apple-Plattformen abzielen, bevorzugen Sie die Objective-C-Methode wie in Aleksey Kozhevnikovs Antwort oder etwas Ähnliches, das sowohl mit int als auch mit long funktioniert - z. B. long ;-) Ein Beispiel, obwohl nicht signiert (dh nicht negativ), ist Andreas Leys Antwort.
Louis St-Amour
1
@Steven Ich habe versucht, die Antwort zu löschen, damit die aktuellen, zutreffenderen Antworten auftauchen und akzeptiert werden, aber anscheinend können akzeptierte Antworten nicht gelöscht werden. Ich habe daher versucht, zumindest den Inhalt anzupassen, um möglichst viele nützliche Informationen für Personen bereitzustellen, die nach einer schnellen Lösung suchen, die keine Warnungen auslöst.
luvieere
In der Apple-Dokumentation zu @luvieere wird klar erläutert, wie NSInteger in Formatzeichenfolgen behandelt wird. Sie sollten Ihre Antwort aktualisieren, um diesem Hinweis zu folgen.
Nikolai Ruhe
2
[@(integerValue) stringValue]ist ein sauberer Ansatz.
Zorayr
185

Obj-C Weg =):

NSString *inStr = [@(month) stringValue];
Alexey Kozhevnikov
quelle
75

Modernes Ziel-C

An NSIntegerhat die Methode stringValue, die auch mit einem Literal verwendet werden kann

NSString *integerAsString1 = [@12 stringValue];

NSInteger number = 13;
NSString *integerAsString2 = [@(number) stringValue];

Sehr einfach. Ist es nicht?

Schnell

var integerAsString = String(integer)
MadNik
quelle
8

%zdFunktioniert für NSInteger ( %tufür NSUInteger) ohne Casts und ohne Warnungen auf 32-Bit- und 64-Bit-Architekturen. Ich habe keine Ahnung, warum dies nicht der " empfohlene Weg " ist.

NSString *string = [NSString stringWithFormat:@"%zd", month];

Wenn Sie daran interessiert sind, warum dies funktioniert, lesen Sie diese Frage .

Kevin
quelle
5

Einfache Möglichkeit:

NSInteger value = x;
NSString *string = [@(value) stringValue];

Hier @(value)konvertiert das Gegebene NSIntegerin ein NSNumberObjekt, für das Sie die gewünschte Funktion aufrufen können stringValue.

Karthik Damodara
quelle
2

Beim Kompilieren mit Unterstützung für arm64wird keine Warnung generiert:

[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger];
Andreas Ley
quelle
1

Sie können auch versuchen:

NSInteger month = 1;
NSString *inStr = [NSString stringWithFormat: @"%ld", month];
NeverHopeless
quelle
0

Die Antwort wird gegeben, aber denken Sie, dass dies in einigen Situationen auch eine interessante Möglichkeit ist, einen String von NSInteger zu erhalten

NSInteger value = 12;
NSString * string = [NSString stringWithFormat:@"%0.0f", (float)value];
Nazir
quelle
0

NSNumber kann in diesem Fall gut für Sie sein.

NSString *inStr = [NSString stringWithFormat:@"%d", 
                    [NSNumber numberWithInteger:[month intValue]]];
Hitzkopf
quelle