2016-08-18 1 views
3

J'ai utilisé des données de base dans mon projet swift iOS et déclaré une variable comme Int32, dans le fichier de classe il a été initialisé à NSNumber et pendant que j'ai essayé d'incrémenter la variable en créant un objet pour cette classe, il montre que l'opérateur binaire + = ne peut pas être appliqué sur NSNumber. Est-il possible d'incrémenter le NSNumber ou devrais-je choisir Int16 ou Int64 pour accéder à la variable.Est-il possible d'incrémenter une variable NSNumber dans iOS swift?

+3

objets 'NSNumber' sont immuables. Vous devez créer une nouvelle instance avec une nouvelle valeur basée sur la valeur d'origine. – rmaddy

+1

Gracieux déplacer par la personne qui a voté vers le bas toutes les réponses. – WMios

Répondre

8

est ici trois réponses différentes de succinctes à bavard:

Étant donné que les NSNumbers sont immuables, attribuer simplement une nouvelle valeur égale à ce que vous voulez:

var num : NSNumber = NSNumber(integer: 1) // NSNumber of 1 
num = num.integerValue + 1 // NSNumber of 2 

Ou vous pouvez l'assigner une autre chemin:

var num : NSNumber = NSNumber(integer: 1) // NSNumber of 1 
num = NSNumber(integer: num.integerValue + 1) // NSNumber of 2 

Ou vous pouvez convertir le NSNumber à un Int, incrémenter l'int, et réaffecte les NSNumber:

var num : NSNumber = NSNumber(integer: 1) // NSNumber of 1 
var int : Int = Int(num) 
int += 1 
num = NSNumber(integer: int) // NSNumber of 2 
+1

Les trois réponses ont fonctionné correctement .. Merci beaucoup pour vos réponses. –

1

Utilisez var. Parce que let veut dire des constantes.

var mybalance = bankbalance as NSNumber 

Mais NSNumber est un objet et mybalance.integerValue ne peut pas être affecté.

if let bankbalance: AnyObject? = keystore.objectForKey("coinbalance"){ 
    let mybalance: NSNumber = bankbalance as NSNumber 
    var b = mybalance.integerValue + 50; 
} 
2
var number = NSNumber(integer: 10) 
number = number.integerValue + 1 
2

Il est impossible d'incrémenter une NSNumber une fois que l'objet est créé. Il n'y a pas API qui permet cela.

Vous devez recréer l'objet NSNumber avec un nouveau (incrémentée) Valeur:

let number = NSNumber(int: 15) 
let incrementedNumber = NSNumber(int: number.intValue + 1)