Como faço para incrementar um NSNumber?
ou seja, myNSNumber ++
objective-c
O aprendiz
fonte
fonte
NSNumber *
, sempre verifique se os tipos primitivos são suficientes.Respostas:
Atualização: Para sua informação, eu pessoalmente gosto mais das respostas de uma linha do BoltClock e do DarkDusts. Eles são mais concisos e não requerem variáveis adicionais.
Para incrementar um
NSNumber
, você terá que obter seu valor, incrementá-lo e armazená-lo em um novoNSNumber
.Por exemplo, para
NSNumber
segurar um inteiro:Ou para
NSNumber
segurar um número de ponto flutuante:fonte
...
significa? Isso é uma referência de pseudo-código, certo? XCode não...
...
é apenas um espaço reservado para qualquer número que você quiser.NSNumber
objetos são imutáveis; o melhor que você pode fazer é pegar o valor primitivo, incrementá-lo e envolver o resultado em seu próprioNSNumber
objeto:fonte
Para quem está usando a versão mais recente do Xcode (escrevendo a partir de 4.4.1, SDK 5.1), com o uso de literais de objeto, você pode limpar o código um pouco mais ...
Ainda é meio chato lidar com o encaixotamento e desembalagem de tudo para fazer operações simples, mas está ficando melhor, ou pelo menos mais curto.
fonte
NSNumbers são imutáveis, você deve criar uma nova instância.
fonte
Junte todos eles e você terá:
fonte
NSNumber
objetos são imutáveis (?)Eu gosto da expressão de ponto porque é mais concisa e é por isso que o IOS oferece suporte em primeiro lugar:
fonte
Se você estiver usando para armazenar um valor integral:
Para coisas de ponto flutuante, a resposta curta é a seguinte, mas é uma má ideia fazer isso, você perderá a precisão e se fizer qualquer tipo de comparação mais tarde, como [myNSNumber isEqual: @ (4.5)], você pode se surpreender :
Se você precisar fazer matemática em números de ponto flutuante representados como objetos em Objective-C (ou seja, se precisar colocá-los em matrizes, dicionários, etc.), você deve usar
NSDecimalNumber
.fonte
Use uma categoria para facilitar o uso futuro. Aqui está uma ideia básica.
fonte
Muita informação boa nas respostas a esta pergunta. Usei a resposta selecionada no meu código e funcionou. Então comecei a ler o resto dos posts e simplifiquei muito o código. É um pouco mais difícil de ler se você não está familiarizado com as mudanças na notação que foram introduzidas no Xcode 5, mas é muito mais limpo. Eu provavelmente poderia fazer apenas uma linha, mas é um pouco difícil descobrir o que estou fazendo.
Estou armazenando um NSNumber em um dicionário e desejo incrementá-lo. Eu pego, converto em um int, incremento ao convertê-lo em um NSNumber e coloco de volta no dicionário.
Código Antigo
Novo Código
fonte