Jak przekonwertować int na NSString?

101

Chciałbym przekonwertować an intna a NSStringw celu C.

W jaki sposób mogę to zrobić?

Jogini
źródło

Odpowiedzi:

147

Prymitywy można przekształcić w obiekty z @()wyrażeniem. Więc najkrótsza droga jest przekształcenie intsię NSNumberi odebrać reprezentację ciąg z stringValuemetodą:

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

lub

NSString *strValue = @(myInt).stringValue;
Wizja
źródło
12
Nieco mniej szczegółowe:NSString *strValue = @(myInt).stringValue;
Distortum
@DielsonSales niektórych obiektów nie ma stringValue, ale wszystkie mają description- więc jako dobrą praktykę lepiej przyzwyczaić się do używania description( NSNumbernie ma, nie musisz się tutaj martwić). Spróbuj tego ( descriptionwydrukuje datę, ale stringValueulegnie awarii):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
Islam Q.
1
@IslamQ. @(myInt)jest wyrażeniem w ramce dla [NSNumber numberWithInt:]i zawsze zwróci NSNumber, gdy otrzyma int. [NSNumber stringValue]zawsze zwróci NSString. W kodzie twojego komentarza wymuszenie rzutowania (id)i przypisywania do innego typu jest oczywistym błędem programistycznym: nigdy nie powinieneś tego robić. To tak, jakby zmieniać metodę, a następnie argumentować, że metoda nie robi tego, co pierwotnie robiła.
Cœur
1
@IslamQ. Spróbuj przekonwertować swój komentarz na Swift bez użycia operatora awarii ( !), a zorientujesz się, że robiłeś to źle w Objective-C. Jeśli obiekt testnie został stworzony przez Ciebie, nie jesteś za to odpowiedzialny. Możesz próbować wywołać isKindOfClass:wszystkie otrzymane parametry, ale nawet to można oszukać (na przykład przekazując strukturę zamiast obiektu NSObject). Więc nie rób tego: po prostu udokumentuj wyraźnie oczekiwane typy.
Cœur
@ Cœur, oczywiście rzucanie obiektu na obiekt (id)jest błędem, tylko po to, aby pokazać, że IMO descriptionjest preferowane stringValue(mogę się mylić, nie programowałem w ObjC od lat)
Islam Pytanie
145
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
Silfverstrom
źródło
@Elist Kiedy znasz typ prymitywny, zastanawiam się, czy może być nieco mniej narzutu, unikając pośredniego numeru NS w kodzie? @(myInt)jest wyrażeniem w ramce , zwraca NSNumber.
Cœur
38
int i = 25;
NSString *myString = [NSString stringWithFormat:@"%d",i];

To jeden z wielu sposobów.

h4xxr
źródło
2

Jeśli ten ciąg jest przeznaczony do prezentacji użytkownikowi końcowemu, należy użyć NSNumberFormatter. Spowoduje to dodanie tysięcy separatorów i uszanuje ustawienia lokalizacji użytkownika:

NSInteger n = 10000;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
NSString *string = [formatter stringFromNumber:@(n)];

Na przykład w USA utworzyłoby to ciąg 10,000, ale w Niemczech tak 10.000.

Obrabować
źródło