Respostas:
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;
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);
@(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.
!) 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.
(id)é um erro, foi apenas para demonstrar o ponto que descriptionprefere IMO stringValue(posso estar errado, não programei em ObjC por anos)
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
@(myInt)é uma expressão em caixa , ela retorna um NSNumber.
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.
NSString *strValue = @(myInt).stringValue;