Como converter int para NSString?

101

Eu gostaria de converter um int em um NSStringno Objetivo C.

Como posso fazer isso?

Yogini
fonte

Respostas:

147

Os primitivos podem ser convertidos em objetos com @()expressão. Assim, o mais curto caminho é transformar inta NSNumbere pegar representação em cadeia com stringValuemétodo:

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

ou

NSString *strValue = @(myInt).stringValue;
Visão
fonte
12
Um pouco menos prolixo:NSString *strValue = @(myInt).stringValue;
Distortum
@DielsonSales alguns objetos não têm stringValue, mas todos têm description- então, como boa prática, é melhor se acostumar a usar description( NSNumbersim, não precisa se preocupar aqui). Tente isto ( descriptionimprimirá a data, mas stringValuetravará):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
Islam Q.
1
@IslamQ. @(myInt)é uma expressão em caixa para [NSNumber numberWithInt:]e sempre retornará um NSNumber quando for fornecido um int. [NSNumber stringValue]sempre retornará um NSString. No código do seu comentário, forçar o lançamento com (id)e atribuir a um tipo diferente é um erro de programação claro: você nunca deve fazer isso. É como varrer um método e então apresentar um argumento sobre aquele método não estar fazendo o que estava fazendo originalmente.
Cœur
1
@IslamQ. Tente converter seu comentário para Swift sem usar o operador de travamento ( !) e você descobrirá que estava fazendo isso incorretamente em Objective-C. Se o objeto testnão foi criado por você, então não é sua responsabilidade. Você pode tentar chamar isKindOfClass:todos os seus parâmetros recebidos, mas mesmo isso pode ser enganado (passando uma estrutura em vez de um NSObject, por exemplo). Portanto, não faça isso: apenas documente explicitamente os tipos esperados.
Cœur
@ Cœur, é claro que lançar um objeto (id)é um erro, foi apenas para demonstrar o ponto que descriptionprefere IMO stringValue(posso estar errado, não programei em ObjC por anos)
Islam Q.
144
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
Silfverstrom
fonte
@Elist quando você conhece o tipo primitivo, gostaria de saber se pode haver um pouco menos sobrecarga, evitando o NSNumber intermediário de seu código? @(myInt)é uma expressão em caixa , ela retorna um NSNumber.
Coeur,
37
int i = 25;
NSString *myString = [NSString stringWithFormat:@"%d",i];

Esta é uma de muitas maneiras.

h4xxr
fonte
2

Se esta string for para apresentação ao usuário final, você deve usar NSNumberFormatter. Isso adicionará milhares de separadores e respeitará as configurações de localização para o usuário:

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

Nos EUA, por exemplo, isso criaria uma string 10,000, mas na Alemanha, sim 10.000.

Roubar
fonte