Je récupère une valeur numérique de ma base de données Firebase (base de données JSON), puis je l’affiche dans une variable textField
, même si cette erreur me parvient lorsque je tente de l’afficher.
Impossible de convertir le type de valeur '__NSCFNumber' en 'NSString'
Comment puis-je convertir correctement la valeur extraite en chaîne, en tenant compte du fait que cette valeur peut changer entre une chaîne et un nombre lorsque je la récupère?.
Voici mon code:
let quantity = child.childSnapshot(forPath: "quantity").value // Get value from Firebase
// Check if the quantity exists, then add to object as string.
if (!(quantity is NSNull) && ((quantity as! String) != "")) {
newDetail.setQuantity(quantity: quantity as! String)
}
L'erreur indique que votre quantité est Number
et que vous ne pouvez pas convertir directement le nombre en String
, essayez comme ceci.
newDetail.setQuantity(quantity: "\(quantity)")
Ou
if let quantity = child.childSnapshot(forPath: "quantity").value as? NSNumber {
newDetail.setQuantity(quantity: quantity.stringValue)
}
else if let quantity = child.childSnapshot(forPath: "quantity").value as? String {
newDetail.setQuantity(quantity: quantity)
}
Ou avec Single si déclaration
if let quantity = child.childSnapshot(forPath: "quantity").value,
(num is NSNumber || num is String) {
newDetail.setQuantity(quantity: "\(quantity))
}
En utilisant les deuxième et troisième options, il n’est pas nécessaire de vérifier si la valeur est nulle.
Swift 4:
let rollNumber:String = String(format: "%@", rollNumberWhichIsANumber as! CVarArg)
Vous pouvez également convertir votre valeur NSNumber en chaîne, ainsi que son approche plus traditionnelle et basique pour formater une chaîne.
newDetail.setQuantity(String(format: "%@", quantity))
Swift 4.
newDetail.setQuantity(String(describing: rollNumberWhichIsANumber))
Dans Swift 4.1 et Xcode 9.4.1
newDetail.setQuantity (quantité: "(quantité)")
Nous pouvons convertir en chaîne comme ceci "\ (quantité)"