web-dev-qa-db-fra.com

iOS Swift: impossible de convertir le type de valeur '__NSCFNumber' en 'NSString'

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)
}
5
n00bAppDev

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.

16
Nirav D

Swift 4:

let rollNumber:String = String(format: "%@", rollNumberWhichIsANumber as! CVarArg)
9
A.G

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))
3
Dev_Tandel

Swift 4.

 newDetail.setQuantity(String(describing: rollNumberWhichIsANumber))
2
Joyal Clifford

Dans Swift 4.1 et Xcode 9.4.1 

newDetail.setQuantity (quantité: "(quantité)")

Nous pouvons convertir en chaîne comme ceci "\ (quantité)"

0
iOS