2017-02-26 1 views
-1

J'essaie de lancer un (Any)? valeur à un entier. Je récupère des informations de Firebase et je veux ajouter le numéro par quelque chose d'autre. C'est pourquoi le (Any)? La valeur doit être un entier. J'ai ceci:Comment projeter (Any)? à Int

let snapshotValues = snapshot.value as? NSDictionary 
let gamesWon = snapshotValues!.value(forKey: "GamesWon") 
let gamesLost = snapshotValues!.value(forKey: "GamesLost") 
let totalgamesPlayedByUser = gamesWon + gamesLost 

Cela me donne une erreur que deux Any? les objets ne peuvent pas être additionnés. J'ai déjà essayé l'Int (gamesWon), gamesWon as! Int, mais cela n'a pas fonctionné. Comment convertir ceci en entier?

+0

double possible de [Cast Option \ [Any \] int] (http: // stackoverflow .com/questions/11716081/cast-optionany-à-int) –

Répondre

2

Si vous savez que les deux clés contiennent Int s, vous devriez être en mesure d'écrire

let gamesWon = snapshotValues!.value(forKey: "GamesWon") as! Int 
let gamesLost = snapshotValues!.value(forKey: "GamesLost") as! Int 

faisant gamesWon + gamesLost une expression Int valide.

Si vous n'êtes pas que si les clés sont là ou non, utilisez if let déclarations au lieu:

if let gamesWon = snapshotValues!.value(forKey: "GamesWon") as? Int { 
    if let gamesLost = snapshotValues!.value(forKey: "GamesLost") as? Int { 
     let totalgamesPlayedByUser = gamesWon + gamesLost 
    } 
} 
+0

changer la réponse à utiliser si laisser des déclarations, de sorte que l'application ne plante pas –

+0

De Swift 1.2 sur, Vous pouvez utiliser une seule instruction 'let':' si laisse gamesWon = ..., laisse gamesLost = ... {...} '. –