¿Cómo convertir int a NSString?

101

Me gustaría convertir un inten un NSStringen Objective C.

¿Cómo puedo hacer esto?

Yogini
fuente

Respuestas:

147

Los primitivos se pueden convertir en objetos con @()expresión. Por lo que el más corto camino es transformar inta NSNumbery recoger representación de cadena con el stringValuemétodo:

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

o

NSString *strValue = @(myInt).stringValue;
Visión
fuente
12
Un poco menos detallado:NSString *strValue = @(myInt).stringValue;
Distortum
@DielsonSales algunos objetos no tienen stringValue, pero todos sí description, por lo que, como buena práctica, es mejor acostumbrarse a usarlos description( NSNumbersí, no hay necesidad de preocuparse aquí). Prueba esto ( descriptionimprimirá la fecha, pero stringValuefallará):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
Islam Q.5 de
1
@IslamQ. @(myInt)es una expresión en caja para [NSNumber numberWithInt:]y siempre devolverá un NSNumber cuando se le dé un int. [NSNumber stringValue]siempre devolverá un NSString. En el código de su comentario, forzar la transmisión (id)y la asignación a un tipo diferente es un claro error de programación: nunca debe hacer eso. Es como mezclar un método y luego argumentar que ese método no está haciendo lo que estaba haciendo originalmente.
Cœur
1
@IslamQ. Intente convertir su comentario a Swift sin usar el operador de bloqueo ( !) y descubrirá que lo estaba haciendo mal en Objective-C. Si el objeto testno fue creado por usted, entonces no es su responsabilidad. Puede intentar llamar isKindOfClass:a todos sus parámetros recibidos, pero incluso eso puede ser engañado (pasando una estructura en lugar de un NSObject, por ejemplo). Así que no lo haga: simplemente documente explícitamente los tipos esperados.
Cœur
@ Cœur, por supuesto, lanzar un objeto a (id)es un error, fue solo para demostrar el punto en el que descriptionse prefiere a la OMI stringValue(puedo estar equivocado, no he programado en ObjC durante años)
Islam Q.
144
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
Silfverstrom
fuente
@Elist cuando conoce el tipo primitivo, me pregunto si puede haber un poco menos de sobrecarga al evitar el NSNumber intermedio de su código. @(myInt)es una expresión en caja , devuelve un NSNumber.
Cœur
37
int i = 25;
NSString *myString = [NSString stringWithFormat:@"%d",i];

Ésta es una de las muchas formas.

h4xxr
fuente
2

Si esta cadena es para presentarla al usuario final, debe usar NSNumberFormatter. Esto agregará miles de separadores y respetará la configuración de localización para el usuario:

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

En los EE. UU., Por ejemplo, eso crearía una cadena 10,000, pero en Alemania, eso sería 10.000.

Robar
fuente