iOS Swift: Could not cast value type '__NSCFNumber' to 'NSString'

The error is saying that your quantity is Number and you cannot directly convert number to String, try like this.

newDetail.setQuantity(quantity: "\(quantity)")

Or

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

Or With Single if statement

if let quantity = child.childSnapshot(forPath: "quantity").value,
   (num is NSNumber || num is String) {
     newDetail.setQuantity(quantity: "\(quantity))
}

Using second and third option there is no need to check for nil.


Swift 4:

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

You may convert your NSNumber value to string like this too, its more traditional and basic approach to format a string

 newDetail.setQuantity(String(format: "%@", quantity))