¿Cómo convierto NSInteger a tipo de datos NSString?


137

¿Cómo se convierte NSIntegeral NSStringtipo de datos?

Intenté lo siguiente, donde el mes es un NSInteger:

  NSString *inStr = [NSString stringWithFormat:@"%d", [month intValue]];

Respuestas:


267

NSIntegers no son objetos, a los que los envía long, para que coincidan con la definición actual de las arquitecturas de 64 bits:

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


11
Intenté esto, pero recibí una advertencia Format specifies type 'int' but the argument has type 'NSInteger *'(aka 'int *'). En lugar de acuerdo con la documentación de Apple , fui conNSString *inStr = [NSString stringWithFormat:@"%d", (int)month];
Steven

8
Tenga en cuenta que en los procesadores de 64 bits, como el nuevo chip A7, si su aplicación está compilada para 64 bits, un NSInteger es realmente un largo, no un int. Al realizar el reparto, (int) mes sería destructivo en plataformas de 64 bits para el caso genérico. Si se dirige exclusivamente a las plataformas de Apple, prefiera la forma Objective-C como en la respuesta de Aleksey Kozhevnikov, o algo similar que funcione con int y long, por ejemplo, long ;-) Un ejemplo, aunque sin signo (es decir, no negativo) está en Andreas La respuesta de Ley.
Louis St-Amour

1
@Steven He intentado eliminar la respuesta para que las actuales, más aplicables, salgan a la superficie y sean aceptadas, pero aparentemente, las respuestas aceptadas no se pueden eliminar. Por lo tanto, he intentado al menos ajustar su contenido para proporcionar tanta información útil para las personas que buscan una solución rápida que no provoque advertencias.
luvieere

La documentación de @luvieere de Apple explica claramente cómo tratar NSInteger en cadenas de formato. Debe actualizar su respuesta para seguir este consejo.
Nikolai Ruhe

2
[@(integerValue) stringValue]Es un enfoque más limpio.
Zorayr


76

Objetivo moderno-C

An NSIntegertiene el método stringValueque puede usarse incluso con un literal

NSString *integerAsString1 = [@12 stringValue];

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

Muy simple. ¿No es así?

Rápido

var integerAsString = String(integer)

8

%zdfunciona para NSIntegers ( %tupara NSUInteger) sin conversiones y sin advertencias en arquitecturas de 32 bits y 64 bits. No tengo idea de por qué esta no es la " forma recomendada ".

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

Si está interesado en por qué esto funciona, vea esta pregunta .


5

Manera fácil de hacer:

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

Aquí los @(value)conversos lo dado NSIntegera un NSNumberobjeto para el que se puede llamar a la función requerida, stringValue.


2

Al compilar con soporte para arm64, esto no generará una advertencia:

[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger];

2

También puedes probar:

NSInteger month = 1;
NSString *inStr = [NSString stringWithFormat: @"%ld", month];

0

Se da la respuesta, pero piense que para alguna situación, esta también será una forma interesante de obtener cadenas de NSInteger

NSInteger value = 12;
NSString * string = [NSString stringWithFormat:@"%0.0f", (float)value];

0

NSNumber puede ser bueno para usted en este caso.

NSString *inStr = [NSString stringWithFormat:@"%d", 
                    [NSNumber numberWithInteger:[month intValue]]];
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.