Jak przekonwertować NSInteger na typ danych NSString?

137

Jak konwertować NSIntegerna NSStringtyp danych?

Wypróbowałem następujące, gdzie miesiąc to NSInteger:

  NSString *inStr = [NSString stringWithFormat:@"%d", [month intValue]];
senthilMuthu
źródło

Odpowiedzi:

267

NSIntegers nie są obiektami, na które rzucasz je long, aby dopasować definicję obecnej architektury 64-bitowej:

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

luvieere
źródło
11
Próbowałem tego, ale otrzymywałem ostrzeżenie Format specifies type 'int' but the argument has type 'NSInteger *'(aka 'int *'). Zamiast według docs firmy Apple , poszedłem zNSString *inStr = [NSString stringWithFormat:@"%d", (int)month];
Steven
8
Zwróć uwagę, że w przypadku procesorów 64-bitowych, takich jak nowy układ A7, jeśli Twoja aplikacja jest kompilowana do wersji 64-bitowej, NSInteger jest w rzeczywistości długim, a nie int. Wykonanie rzutowania (int) month byłoby destrukcyjne na platformach 64-bitowych w przypadku ogólnym. Jeśli celujesz wyłącznie w platformy Apple, preferuj sposób Objective-C, jak w odpowiedzi Aleksey Kozhevnikov, lub coś podobnego, co będzie działać zarówno z int, jak i long - np. Long ;-) Przykład, choć bez znaku (czyli nieujemny) jest w Andreas Odpowiedź Leya.
Louis St-Amour,
1
@Steven Próbowałem usunąć odpowiedź, aby aktualne, bardziej odpowiednie, wypłynęły i zostały zaakceptowane, ale najwyraźniej zaakceptowanych odpowiedzi nie można usunąć. Dlatego starałem się przynajmniej dostosować jego zawartość, aby dostarczyć jak najwięcej użytecznych informacji dla osób poszukujących szybkiego rozwiązania, które nie powoduje ostrzeżeń.
luvieere,
Dokumentacja @luvieere Apple jasno wyjaśnia, jak traktować NSInteger w łańcuchach formatujących. Zaktualizuj swoją odpowiedź, aby zastosować się do tej porady.
Nikolai Ruhe
2
[@(integerValue) stringValue]to czystsze podejście.
Zorayr,
185

Sposób Obj-C =):

NSString *inStr = [@(month) stringValue];
Alexey Kozhevnikov
źródło
76

Nowoczesne Objective-C

An NSIntegerma metodę, stringValuektórej można używać nawet z literałem

NSString *integerAsString1 = [@12 stringValue];

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

Bardzo prosty. Prawda?

Szybki

var integerAsString = String(integer)
MadNik
źródło
8

%zddziała dla NSIntegers ( %tudla NSUInteger) bez rzutowań i bez ostrzeżeń na architekturach 32-bitowych i 64-bitowych. Nie mam pojęcia, dlaczego nie jest to „ zalecany sposób ”.

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

Jeśli interesuje Cię, dlaczego to działa, zobacz to pytanie .

Kevin
źródło
5

Łatwy sposób:

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

Tutaj @(value)konwertuje dane NSIntegerdo NSNumberobiektu, dla którego można wywołać żądaną funkcję stringValue.

Karthik damodara
źródło
2

Podczas kompilacji z obsługą dla arm64, nie spowoduje to wygenerowania ostrzeżenia:

[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger];
Andreas Ley
źródło
1

Możesz też spróbować:

NSInteger month = 1;
NSString *inStr = [NSString stringWithFormat: @"%ld", month];
NeverHopeless
źródło
0

Odpowiedź została udzielona, ​​ale pomyśl, że w niektórych sytuacjach będzie to również interesujący sposób na uzyskanie ciągu znaków od NSInteger

NSInteger value = 12;
NSString * string = [NSString stringWithFormat:@"%0.0f", (float)value];
Nazir
źródło
0

W takim przypadku NSNumber może Ci się przydać.

NSString *inStr = [NSString stringWithFormat:@"%d", 
                    [NSNumber numberWithInteger:[month intValue]]];
pasjonat
źródło