Come convertire int in NSString?


101

Vorrei convertire un intin a NSStringin Objective C.

Come posso fare questo?

Risposte:


147

Le primitive possono essere convertite in oggetti con @()espressione. Così il più breve modo è quello di trasformare inta NSNumbere pick up rappresentazione di stringa con stringValueil metodo:

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

o

NSString *strValue = @(myInt).stringValue;

12
Un po 'meno NSString *strValue = @(myInt).stringValue;
prolisso

@DielsonSales alcuni oggetti non hanno stringValue, ma tutti lo hanno description, quindi come buona pratica è meglio abituarsi all'uso description( sì NSNumber, non c'è bisogno di preoccuparsi qui). Prova questo ( descriptionstamperà la data, ma stringValueandrà in crash):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
Islam Q.

1
@IslamQ. @(myInt)è un'espressione boxed per [NSNumber numberWithInt:]e restituirà sempre un NSNumber quando viene fornito un int. [NSNumber stringValue]restituirà sempre un NSString. Nel codice del tuo commento, forzare il casting (id)e l'assegnazione a un tipo diverso è un chiaro errore di programmazione: non dovresti mai farlo. È come cambiare un metodo e poi argomentare su quel metodo non facendo quello che stava facendo originariamente.
Cœur

1
@IslamQ. Prova a convertire il tuo commento in Swift senza utilizzare l'operatore di arresto anomalo ( !) e scoprirai che lo stavi facendo in modo sbagliato in Objective-C. Se l'oggetto testnon è stato creato da te, non è tua responsabilità. Puoi tentare di chiamare isKindOfClass:tutti i parametri ricevuti, ma anche questo può essere ingannato (passando una struttura invece di un NSObject per esempio). Quindi non farlo: documenta in modo esplicito i tipi previsti.
Cœur

@ Cœur, ovviamente lanciare un oggetto su un oggetto (id)è un errore, era solo per dimostrare il punto in cui descriptionsi preferisce l' IMO stringValue(potrei sbagliarmi, non ho programmato in ObjC per anni)
Islam Q.

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

@Elist quando conosci il tipo primitivo, mi chiedo se potrebbe esserci un sovraccarico leggermente inferiore evitando il NSNumber intermedio dal tuo codice? @(myInt)è un'espressione boxed , restituisce un NSNumber.
Cœur

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

Questo è uno dei tanti modi.


2

Se questa stringa è per la presentazione all'utente finale, dovresti usare NSNumberFormatter. Ciò aggiungerà migliaia di separatori e rispetterà le impostazioni di localizzazione per l'utente:

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

Negli Stati Uniti, ad esempio, si creerebbe una stringa 10,000, ma in Germania lo sarebbe 10.000.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.