Risposte:
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;
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);
@(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.
!) 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.
(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)
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
@(myInt)è un'espressione boxed , restituisce un NSNumber.
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.
NSString *strValue = @(myInt).stringValue;