Como converter NSInteger em tipo de dados NSString?


137

Como alguém se converte NSIntegerno NSStringtipo de dados?

Eu tentei o seguinte, em que mês é um NSInteger:

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

Respostas:


267

Os NSIntegers não são objetos, você os lança para long, a fim de corresponder à definição atual das arquiteturas de 64 bits:

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


11
Eu tentei isso, mas continuei recebendo um aviso Format specifies type 'int' but the argument has type 'NSInteger *'(aka 'int *'). Em vez de acordo com docs da Apple , eu fui comNSString *inStr = [NSString stringWithFormat:@"%d", (int)month];
Steven

8
Observe que em processadores de 64 bits, como o novo chip A7, se o aplicativo for compilado para 64 bits, um NSInteger é realmente um longo, não um int. Fazer o elenco, (int) mês seria destrutivo em plataformas de 64 bits para o caso genérico. Se direcionar exclusivamente as plataformas da Apple, prefira a maneira Objective-C, como na resposta de Aleksey Kozhevnikov, ou algo semelhante que funcione com int e long - por exemplo, long ;-) Um exemplo, embora não assinado (que não seja negativo), está em Andreas A resposta de Ley.
Louis St-Amour

1
@Steven Tentei excluir a resposta para que as respostas atuais e mais aplicáveis ​​aparecessem e fossem aceitas, mas aparentemente as respostas aceitas não podem ser excluídas. Por isso, tentei pelo menos ajustar seu conteúdo para fornecer o máximo de informações úteis para pessoas que procuram uma solução rápida que não aciona avisos.
Luvieere

A documentação da @luvieere Apple explica claramente como tratar o NSInteger em strings de formato. Você deve atualizar sua resposta para seguir este aviso.
Nikolai Ruhe

2
[@(integerValue) stringValue]é uma abordagem mais limpa.
Zorayr 25/03


76

Objetivo moderno-C

Um NSIntegertem o método stringValueque pode ser usado mesmo com um literal

NSString *integerAsString1 = [@12 stringValue];

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

Muito simples. Não é?

Rápido

var integerAsString = String(integer)

8

%zdfunciona para NSIntegers ( %tupara NSUInteger) sem conversão e sem avisos nas arquiteturas de 32 e 64 bits. Não tenho ideia de por que essa não é a " maneira recomendada ".

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

Se você estiver interessado em saber por que isso funciona, consulte esta pergunta .


5

Maneira fácil de fazer:

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

Aqui, @(value)converte o dado NSIntegerem um NSNumberobjeto para o qual você pode chamar a função necessária stringValue,.


2

Ao compilar com suporte para arm64, isso não gera um aviso:

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

1

Você também pode tentar:

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

0

A resposta é dada, mas pense que, para alguma situação, isso também será uma maneira interessante de obter a string do NSInteger

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

0

O NSNumber pode ser bom para você neste caso.

NSString *inStr = [NSString stringWithFormat:@"%d", 
                    [NSNumber numberWithInteger:[month intValue]]];
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.